复杂根标签

发布于 2024-12-08 14:10:42 字数 2268 浏览 0 评论 0原文

我有一个具有以下结构的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

物价感观 2024-12-15 14:10:42

这将返回没有名称空间的 XML,猜猜这就是您所需要的?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xx="AdvancedShipNotice.xsd">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <xsl:for-each select="xx:*">
        <xsl:call-template name="copy"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="copy">
    <xsl:element name="{local-name()}">
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="text()"/>
        <xsl:for-each select="xx:*">
            <xsl:call-template name="copy"/>
        </xsl:for-each>
    </xsl:element>
</xsl:template>

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

它返回以下内容:

<CSCNASN>
<RecordType0>
    <Darta1/>
    <Darta2/>
</RecordType0>
<RecordType1>
    <Darta1/>
    <Darta2/>
</RecordType1>
 </CSCNASN>

This returns your XML without namespaces, guess that's what you need ?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xx="AdvancedShipNotice.xsd">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
    <xsl:for-each select="xx:*">
        <xsl:call-template name="copy"/>
    </xsl:for-each>
</xsl:template>

<xsl:template name="copy">
    <xsl:element name="{local-name()}">
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="text()"/>
        <xsl:for-each select="xx:*">
            <xsl:call-template name="copy"/>
        </xsl:for-each>
    </xsl:element>
</xsl:template>

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

it returns following :

<CSCNASN>
<RecordType0>
    <Darta1/>
    <Darta2/>
</RecordType0>
<RecordType1>
    <Darta1/>
    <Darta2/>
</RecordType1>
 </CSCNASN>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文