复杂根标签
我有一个具有以下结构的 xml 文件:
<?xml version="1.0" encoding="utf-16"?>
<CSCNASN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd">
<RecordType0>
<Darta1 />
<Darta2 />
</RecordType0>
<RecordType1>
<Darta1 />
<Darta2 />
</RecordType1>
</CSCNASN
我想删除标签 CSCANSN 旁边的所有部分 (xmlns:xsi="http://www.w3.org/2001/XMLSchema -instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd")
并使用以下内容创建 xml 文件结构相同,但只是带有标签 CSCANSN。
我尝试过这种转换,但它没有按我想要的方式工作。我定义了一个变量来选择所有 xml 标签以便替换它。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:java="http://xml.apache.org/xslt/java"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/message">
<xsl:variable name="fileName">
<xsl:value-of select="@number"/>
</xsl:variable>
<xsl:variable name="outermostElementName" select="name(/*)" />
<xsl:variable name="prova">"CSCNASN\ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd""</xsl:variable>
<message>
<xsl:for-each select="./@*">
<xsl:copy />
</xsl:for-each>
<xsl:for-each select="./$prova">
<CSCNASN>
<xsl:attribute name="fileName">
<xsl:value-of select="$fileName" />
</xsl:attribute>
<xsl:apply-templates select="node()" />
</CSCNASN>
</xsl:for-each>
</message>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
I have an xml file with this structure:
<?xml version="1.0" encoding="utf-16"?>
<CSCNASN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd">
<RecordType0>
<Darta1 />
<Darta2 />
</RecordType0>
<RecordType1>
<Darta1 />
<Darta2 />
</RecordType1>
</CSCNASN
I want to remove all the part next to the tag CSCNASN (xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd")
and to create an xml file with the same structure but just with the tag CSCNASN.
I tried with this transformation but it is not working as I want. I defined a variable to select all the xml tag in order to replace it.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:java="http://xml.apache.org/xslt/java"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/message">
<xsl:variable name="fileName">
<xsl:value-of select="@number"/>
</xsl:variable>
<xsl:variable name="outermostElementName" select="name(/*)" />
<xsl:variable name="prova">"CSCNASN\ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AdvancedShipNotice.xsd""</xsl:variable>
<message>
<xsl:for-each select="./@*">
<xsl:copy />
</xsl:for-each>
<xsl:for-each select="./$prova">
<CSCNASN>
<xsl:attribute name="fileName">
<xsl:value-of select="$fileName" />
</xsl:attribute>
<xsl:apply-templates select="node()" />
</CSCNASN>
</xsl:for-each>
</message>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这将返回没有名称空间的 XML,猜猜这就是您所需要的?
它返回以下内容:
This returns your XML without namespaces, guess that's what you need ?
it returns following :