Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
XSLT转换:通过XML循环获取节点和值_Xml_Xslt - Fatal编程技术网

XSLT转换:通过XML循环获取节点和值

XSLT转换:通过XML循环获取节点和值,xml,xslt,Xml,Xslt,我有一个输入XML,我想使用XSLT将其转换为其他XML 输入XML: <XML> <Fields> <F1> Val1 </F1> <F2> Val2 </F2> <F1> Val3 </F1> <F4> Va

我有一个输入XML,我想使用XSLT将其转换为其他XML

输入XML:

  <XML>
        <Fields>
                    <F1> Val1 </F1>
                    <F2> Val2 </F2>
                    <F1> Val3 </F1>
                    <F4> Val4 </F4>
        </Fields>
        </XML>
<SomeThing>

    <SomeThing>
                <Field id = "F1"> <val> Val1 </val> </Field>
                <Field id = "F2"> <val> Val2 </val> </Field>
                <Field id = "F3"> <val> Val3 </val> </Field>
                <Field id = "F4"> <val> Val4 </val> </Field>
  </SomeThing>
    </SomeThing>

瓦尔1
瓦尔2
Val3
瓦尔4
输出XML:

  <XML>
        <Fields>
                    <F1> Val1 </F1>
                    <F2> Val2 </F2>
                    <F1> Val3 </F1>
                    <F4> Val4 </F4>
        </Fields>
        </XML>
<SomeThing>

    <SomeThing>
                <Field id = "F1"> <val> Val1 </val> </Field>
                <Field id = "F2"> <val> Val2 </val> </Field>
                <Field id = "F3"> <val> Val3 </val> </Field>
                <Field id = "F4"> <val> Val4 </val> </Field>
  </SomeThing>
    </SomeThing>

瓦尔1
瓦尔2
Val3
瓦尔4
我的XSLT:(我知道它错了:()



XSLT很难使用。

这里有一个更具扩展性的答案(因为它使用模板),不使用
,也不需要

当此XSLT:

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

  <xsl:template match="/*">
    <SomeThings>
      <xsl:apply-templates/>
    </SomeThings>
  </xsl:template>

  <xsl:template match="Fields">
    <SomeThing>
      <xsl:apply-templates/>
    </SomeThing>
  </xsl:template>

  <xsl:template match="Fields/*">
    <Field id="{name()}">
      <val>
        <xsl:apply-templates/>
      </val>
    </Field>
  </xsl:template>
</xsl:stylesheet>
<XML>
  <Fields>
    <F1> Val1 </F1>
    <F2> Val2 </F2>
    <F1> Val3 </F1>
    <F4> Val4 </F4>
  </Fields>
</XML>
<SomeThings>
  <SomeThing>
    <Field id="F1">
      <val> Val1 </val>
    </Field>
    <Field id="F2">
      <val> Val2 </val>
    </Field>
    <Field id="F1">
      <val> Val3 </val>
    </Field>
    <Field id="F4">
      <val> Val4 </val>
    </Field>
  </SomeThing>
</SomeThings>

…应用于提供的XML:

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

  <xsl:template match="/*">
    <SomeThings>
      <xsl:apply-templates/>
    </SomeThings>
  </xsl:template>

  <xsl:template match="Fields">
    <SomeThing>
      <xsl:apply-templates/>
    </SomeThing>
  </xsl:template>

  <xsl:template match="Fields/*">
    <Field id="{name()}">
      <val>
        <xsl:apply-templates/>
      </val>
    </Field>
  </xsl:template>
</xsl:stylesheet>
<XML>
  <Fields>
    <F1> Val1 </F1>
    <F2> Val2 </F2>
    <F1> Val3 </F1>
    <F4> Val4 </F4>
  </Fields>
</XML>
<SomeThings>
  <SomeThing>
    <Field id="F1">
      <val> Val1 </val>
    </Field>
    <Field id="F2">
      <val> Val2 </val>
    </Field>
    <Field id="F1">
      <val> Val3 </val>
    </Field>
    <Field id="F4">
      <val> Val4 </val>
    </Field>
  </SomeThing>
</SomeThings>

瓦尔1
瓦尔2
Val3
瓦尔4
…生成所需的输出:

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

  <xsl:template match="/*">
    <SomeThings>
      <xsl:apply-templates/>
    </SomeThings>
  </xsl:template>

  <xsl:template match="Fields">
    <SomeThing>
      <xsl:apply-templates/>
    </SomeThing>
  </xsl:template>

  <xsl:template match="Fields/*">
    <Field id="{name()}">
      <val>
        <xsl:apply-templates/>
      </val>
    </Field>
  </xsl:template>
</xsl:stylesheet>
<XML>
  <Fields>
    <F1> Val1 </F1>
    <F2> Val2 </F2>
    <F1> Val3 </F1>
    <F4> Val4 </F4>
  </Fields>
</XML>
<SomeThings>
  <SomeThing>
    <Field id="F1">
      <val> Val1 </val>
    </Field>
    <Field id="F2">
      <val> Val2 </val>
    </Field>
    <Field id="F1">
      <val> Val3 </val>
    </Field>
    <Field id="F4">
      <val> Val4 </val>
    </Field>
  </SomeThing>
</SomeThings>

瓦尔1
瓦尔2
Val3
瓦尔4

收到了,请再次检查