Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing XSLT-预定义名称空间_Parsing_Xslt_Namespaces - Fatal编程技术网

Parsing XSLT-预定义名称空间

Parsing XSLT-预定义名称空间,parsing,xslt,namespaces,Parsing,Xslt,Namespaces,嗨,我有一个XML,每次交付时都有一个不同的唯一命名名称空间,我无法用标准流程预先确定 <ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1"> <Extensions> <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification> <Ext

嗨,我有一个XML,每次交付时都有一个不同的唯一命名名称空间,我无法用标准流程预先确定

<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>111</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>222</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extention>
</Extentions>
</ABC>

urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331
111
0
222
1.
下一个交付的XML可能是

<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extention>
</Extentions>
</ABC>

urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331
333
0
444
1.
我当前的XSL样式表适用于第一个预定义名称空间的XML 但我正在寻找一种方法来重新定义它以后。在这个过程中。我添加了一个变量来从Identification元素中提取相关的uuid,但不确定如何集成它。使用下面的样式表处理虚假结果中的任何其他XML结果

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*"/>

<xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

<xsl:template match="/ABC/Extensions/SrcPackage>
  <xsl:copy>
            <this:ABDList>
                <xsl:copy-of select ="this:ABDList/*"/>
                <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin><xsl:value-of select="somethingelse"/> </this:SubBegin>
  </xsl:copy>
</xsl:template>

<xsl:template match="/ABC/Extensions/MatPackage>
  <xsl:copy>
            <this:ABDList>
                <xsl:copy-of select ="this:ABDList/*"/>
                <TaggedB>999</TaggedB>
            </this:ABDList >
            <this:SubBegin><xsl:value-of select="somethingelse"/> </this:SubBegin>
  </xsl:copy>
</xsl:template>
</xsl:stylesheet>

999
预期结果

<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
          <TaggedA>888</TaggedA>
        </this:ABDList>
        <this:SubBegin>a value</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
          <TaggedB>999</TaggedA>
        </this:ABDList>
        <this:SubBegin>a value</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extention>
</Extentions>
</ABC>

urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331
333
888
价值
444
999
价值
非常感谢,, 阿德里安

我有一个XML,每次交付时都有一个不同的唯一名称 名称空间

前面的人显然不理解拥有名称空间的目的

也许这可以解决你的不幸处境:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

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

<xsl:template match="SrcPackage/*/TaggedValue">
    <xsl:copy-of select="."/>
    <TaggedA>888</TaggedA>
</xsl:template>

<xsl:template match="MatPackage/*/TaggedValue">
    <xsl:copy-of select="."/>
    <TaggedB>999</TaggedB>
</xsl:template>

</xsl:stylesheet>

888
999

这是一个奇怪的输入(他们抽的是什么?)。但由于名称空间仅用于一个元素ABDList,因此我的方法是使用XSLT 2.0中的
*:ABDList
,或XSLT 1.0中的
*[local-name()='ABDList']
选择ABDList元素。

此转换

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

  <xsl:template match="Extension/SrcPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedA>888</TaggedA>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Extension/MatPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedB>999</TaggedB>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
    <Extensions>
        <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
        <Extension>
            <SrcPackage>
                <this:ABDList>
                    <TaggedValue>111</TaggedValue>
                </this:ABDList>
                <this:SubBegin>0</this:SubBegin>
            </SrcPackage>
            <MatPackage>
                <this:ABDList>
                    <TaggedValue>222</TaggedValue>
                </this:ABDList>
                <this:SubBegin>1</this:SubBegin>
            </MatPackage>
            <!-- Stuff -->
        </Extension>
    </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>111</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>222</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extension>
</Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>333</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>444</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>

888
999
应用于第一个提供的XML文档时

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

  <xsl:template match="Extension/SrcPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedA>888</TaggedA>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Extension/MatPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedB>999</TaggedB>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
    <Extensions>
        <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
        <Extension>
            <SrcPackage>
                <this:ABDList>
                    <TaggedValue>111</TaggedValue>
                </this:ABDList>
                <this:SubBegin>0</this:SubBegin>
            </SrcPackage>
            <MatPackage>
                <this:ABDList>
                    <TaggedValue>222</TaggedValue>
                </this:ABDList>
                <this:SubBegin>1</this:SubBegin>
            </MatPackage>
            <!-- Stuff -->
        </Extension>
    </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>111</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>222</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extension>
</Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>333</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>444</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>

urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331
111
0
222
1.
生成所需的正确结果

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

  <xsl:template match="Extension/SrcPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedA>888</TaggedA>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Extension/MatPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedB>999</TaggedB>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
    <Extensions>
        <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
        <Extension>
            <SrcPackage>
                <this:ABDList>
                    <TaggedValue>111</TaggedValue>
                </this:ABDList>
                <this:SubBegin>0</this:SubBegin>
            </SrcPackage>
            <MatPackage>
                <this:ABDList>
                    <TaggedValue>222</TaggedValue>
                </this:ABDList>
                <this:SubBegin>1</this:SubBegin>
            </MatPackage>
            <!-- Stuff -->
        </Extension>
    </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>111</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>222</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extension>
</Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>333</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>444</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>

urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331
111
888
某物
222
999
某物
在第二个提供的XML文档上应用相同的转换时

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

  <xsl:template match="Extension/SrcPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedA>888</TaggedA>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Extension/MatPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedB>999</TaggedB>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
    <Extensions>
        <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
        <Extension>
            <SrcPackage>
                <this:ABDList>
                    <TaggedValue>111</TaggedValue>
                </this:ABDList>
                <this:SubBegin>0</this:SubBegin>
            </SrcPackage>
            <MatPackage>
                <this:ABDList>
                    <TaggedValue>222</TaggedValue>
                </this:ABDList>
                <this:SubBegin>1</this:SubBegin>
            </MatPackage>
            <!-- Stuff -->
        </Extension>
    </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>111</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>222</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extension>
</Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>333</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>444</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>

urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331
333
0
444
1.
再次生成所需的正确结果

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
  <xsl:strip-space elements="*"/>

  <xsl:variable name="SelOpGroup" select="/ABC/Extensions/Identification"/>

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

  <xsl:template match="Extension/SrcPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedA>888</TaggedA>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Extension/MatPackage">
    <xsl:copy>
            <xsl:element name="{'this:ABDList'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:copy-of select ="*[name() = 'this:ABDList']/*"/>
                <TaggedB>999</TaggedB>
            </xsl:element>
            <xsl:element name="{'this:SubBegin'}" namespace="{$SelOpGroup}">
                <xsl:copy-of select="/*/namespace::*[name()='this']"/>
                <xsl:value-of select="'somethingelse'"/>
            </xsl:element>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
    <Extensions>
        <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
        <Extension>
            <SrcPackage>
                <this:ABDList>
                    <TaggedValue>111</TaggedValue>
                </this:ABDList>
                <this:SubBegin>0</this:SubBegin>
            </SrcPackage>
            <MatPackage>
                <this:ABDList>
                    <TaggedValue>222</TaggedValue>
                </this:ABDList>
                <this:SubBegin>1</this:SubBegin>
            </MatPackage>
            <!-- Stuff -->
        </Extension>
    </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1f15a9-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>111</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>222</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
<Extensions>
  <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
  <Extension>
    <SrcPackage>
        <this:ABDList>
          <TaggedValue>333</TaggedValue>
        </this:ABDList>
        <this:SubBegin>0</this:SubBegin>
    </SrcPackage>
    <MatPackage>
        <this:ABDList>
          <TaggedValue>444</TaggedValue>
        </this:ABDList>
        <this:SubBegin>1</this:SubBegin>
    </MatPackage>
    <!-- Stuff -->
  </Extension>
</Extensions>
</ABC>
<ABC xmlns:this="urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331" version="1.1">
   <Extensions>
      <Identification>urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331</Identification>
      <Extension>
         <SrcPackage>
            <this:ABDList>
               <TaggedValue>333</TaggedValue>
               <TaggedA>888</TaggedA>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </SrcPackage>
         <MatPackage>
            <this:ABDList>
               <TaggedValue>444</TaggedValue>
               <TaggedB>999</TaggedB>
            </this:ABDList>
            <this:SubBegin>somethingelse</this:SubBegin>
         </MatPackage><!-- Stuff -->
      </Extension>
   </Extensions>
</ABC>

urn:uuid:9b1FFae4-69de-11d2-b6bc-fcab70ff7331
333
888
某物
444
999
某物

谢谢Michael,是的,一家颇受尊敬的公司并没有让我轻松。我喜欢你的回答,但我会更新这个问题,因为我需要一种方法来重新定义名称空间,因为我还必须解析使用this:element name约定的元素。谢谢Michael,我更新了这个问题,以显示更复杂的问题,以及找到一种方法重新定义名称空间的要求。两个版本加上一个版本的名称空间建议都很好。如果错误的名称空间被更广泛地使用,那么我将使用转换管道,第一步是规范名称空间,而不做其他任何事情;第二步是正常转换,使用正常的输入。您上次的修改令人困惑:
什么地方是“somethingelse”?您现在有了想要的通用转换。谢谢Dimitre。像往常一样令人惊奇的结果!