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
从XML的不同部分选择XSL中的数据_Xml_Xslt - Fatal编程技术网

从XML的不同部分选择XSL中的数据

从XML的不同部分选择XSL中的数据,xml,xslt,Xml,Xslt,我是XSLT新手 我有一个XML- <root> <fiberList> <fiber> <A>abcd</A> <B>bcde</B> <C>cdef</C> </fiber> &l

我是XSLT新手

我有一个XML-

<root>
  <fiberList>
              <fiber>
                     <A>abcd</A>
                     <B>bcde</B>
                     <C>cdef</C>

              </fiber>
    </fiberList>
           <generatorList>
              <generator>
                     <D>defg</D>
                     <E>efgh</E>
              </generator>
 </root>

abcd
bcde
cdef
德福
efgh
我想通过XSL将这个XML转换成另一个XML。 生成的XML应该是这样的-

<parent>
          <child>
                  <M>abcd</M>
                  <N>bcde</N>
                  <O>efgh</O>
          </child>
</parent>

abcd
bcde
efgh
但我在转换后得到了以下XML-

<parent>
          <child>
                  <M>abcd</M>
                  <N>bcde</N>
                  <O/>
          </child>
</parent>

abcd
bcde
我的XSL如下-

<xsl:template match="/">
<xsl:element name="parent">
      <xsl:apply-templates select="root/fiberList/fiber"/>
</xsl:element>
</xsl:template>
<xsl:template match="root/fiberList/fiber">
    <xsl:element name="child">
        <xsl:element name="M">
            <xsl:value-of select="A"/>
        </element>
        <xsl:element name="N">
            <xsl:value-of select="B"/>
        </element>
       <xsl:element name="O">
           <xsl:value-of select="root/generatorList/generator/E"/>
       </element>
   </element>
</template>
</stylesheet>


请帮忙。

我还没试过。。但我认为 此处缺少前导“/”:

 <xsl:value-of select="root/generatorList/generator/E"/>

请试试这个:

 <xsl:value-of select="/root/generatorList/generator/E"/>

否则,xslt引擎将试图找到相对路径 “根/生成器列表/生成器/E”从匹配的 模板的元素(/root/fiberList/fiber),但没有
/root/fiberList/fiber/root/generatorList/generator/E.

我还没试过。。但我认为 此处缺少前导“/”:

 <xsl:value-of select="root/generatorList/generator/E"/>

请试试这个:

 <xsl:value-of select="/root/generatorList/generator/E"/>

否则,xslt引擎将试图找到相对路径 “根/生成器列表/生成器/E”从匹配的 模板的元素(/root/fiberList/fiber),但没有
/root/fiberList/fiber/root/generatorList/generator/E.

您也可以使用此样式表:

XSLT-1.0

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

    <xsl:template match="/root">
        <parent>
            <child>
                <xsl:apply-templates select="fiberList/fiber/A | fiberList/fiber/B | generatorList/generator/E"/>
            </child>
        </parent>
    </xsl:template>

    <xsl:template match="A">
        <M>
            <xsl:value-of select="."/>
        </M>
    </xsl:template>
    <xsl:template match="B">
        <N>
            <xsl:value-of select="."/>
        </N>
    </xsl:template>
    <xsl:template match="E">
        <O>
            <xsl:value-of select="."/>
        </O>
    </xsl:template>

</xsl:stylesheet>

作为替代,您也可以使用此样式表:

XSLT-1.0

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

    <xsl:template match="/root">
        <parent>
            <child>
                <xsl:apply-templates select="fiberList/fiber/A | fiberList/fiber/B | generatorList/generator/E"/>
            </child>
        </parent>
    </xsl:template>

    <xsl:template match="A">
        <M>
            <xsl:value-of select="."/>
        </M>
    </xsl:template>
    <xsl:template match="B">
        <N>
            <xsl:value-of select="."/>
        </N>
    </xsl:template>
    <xsl:template match="E">
        <O>
            <xsl:value-of select="."/>
        </O>
    </xsl:template>

</xsl:stylesheet>

您使用的XSLT版本是什么?请将示例更正为有效的XMLs。您使用的XSLT版本是什么?请将示例更正为有效的XMLs。您使用的XSLT版本是什么?请将样本更正为有效的XMLs。