Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
如何使用xsl从xml文件生成特定的xml结果?_Xml_Xslt - Fatal编程技术网

如何使用xsl从xml文件生成特定的xml结果?

如何使用xsl从xml文件生成特定的xml结果?,xml,xslt,Xml,Xslt,使用下面的xml,您能否帮助我完成以下所需的xsl转换代码: 当前XML: <ROOTNODE> <SUBNODE1> <DETAILS> <SOMETHING>Here</SOMETHING> <UNIMPORTANT1>Thing</UNIMPORTANT1> </DETAILS> <SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT&

使用下面的xml,您能否帮助我完成以下所需的xsl转换代码:

当前XML:

<ROOTNODE>
  <SUBNODE1>
<DETAILS>
  <SOMETHING>Here</SOMETHING>
  <UNIMPORTANT1>Thing</UNIMPORTANT1>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>
<ALSOUNIMPORTANT>Very</ALSOUNIMPORTANT>
  </SUBNODE1>
</ROOTNODE>

在这里
事情
这
非常
输出XML:

<DETAILS>
  <SOMETHING>Here</SOMETHING>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>

在这里
这
您可以尝试:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <newroot>
            <DETAILS>
                <xsl:copy-of select="//DETAILS/SOMETHING"/>
            </DETAILS>
            <xsl:copy-of select="//SOMEWHATIMPORTANT"/>
        </newroot>
    </xsl:template>

</xsl:stylesheet>
运行项目会产生以下输出:

$ ant && cat build/data.xml
Buildfile: /home/mark/tmp/build.xml

transform:
     [xslt] Processing /home/mark/tmp/data.xml to /home/mark/tmp/build/data.xml
     [xslt] Loading stylesheet /home/mark/tmp/transform.xsl

BUILD SUCCESSFUL
Total time: 0 seconds
<?xml version="1.0" encoding="UTF-8"?>
<newroot>
<DETAILS>
<SOMETHING>Here</SOMETHING>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>
</newroot>
$ant&&cat build/data.xml
Buildfile:/home/mark/tmp/build.xml
转换:
[xslt]处理/home/mark/tmp/data.xml到/home/mark/tmp/build/data.xml
[xslt]加载样式表/home/mark/tmp/transform.xsl
建设成功
总时间:0秒
在这里
这
编译文件

data.xml

在这里
事情
这
非常

此转换:

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

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

 <xsl:template match="/*|/*/*"><xsl:apply-templates/></xsl:template>
 <xsl:template match="*[contains(name(), 'UNIMPORTANT')]"/>
</xsl:stylesheet>
<DETAILS>
   <SOMETHING>Here</SOMETHING>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>

应用于提供的XML文档时:

<ROOTNODE>
    <SUBNODE1>
        <DETAILS>
            <SOMETHING>Here</SOMETHING>
            <UNIMPORTANT1>Thing</UNIMPORTANT1>
        </DETAILS>
        <SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>
        <ALSOUNIMPORTANT>Very</ALSOUNIMPORTANT>
    </SUBNODE1>
</ROOTNODE>

在这里
事情
这
非常
生成所需的正确结果

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

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

 <xsl:template match="/*|/*/*"><xsl:apply-templates/></xsl:template>
 <xsl:template match="*[contains(name(), 'UNIMPORTANT')]"/>
</xsl:stylesheet>
<DETAILS>
   <SOMETHING>Here</SOMETHING>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>

在这里
这

到目前为止,您尝试了什么?堆栈溢出不是让您编写代码的地方,而是让您在编写代码时获得帮助的地方。为什么您希望有人会尝试阅读和比较两个长的单行XML文档?请,正确地编辑和格式化。好的,我会编辑和格式化这个,我以前从未在这里发布过,我认为作为一个开发人员,这不会是一个问题。我试过一些东西,但没有一个奏效,所以我把它们扔掉了——不认为它们值得发布,花了一天时间搜索和尝试——现在基本上是在为它发毛,只是想弄明白它似乎很简单!:/顺便说一句,我试过的一件事是你的post[link]@Dimitre,但它并没有完全做到这一点——它去掉了元素名,只显示了子节点中的文本。。任何想法都可以appreciated@Peter哦,这很简单,很基本,也很直截了当——看我的答案。这确实完成了很多事情,非常感谢!)当我继续学习xsl规则时,您是否有任何书籍或其他在线参考资料可供我参考?再次感谢dimitre,能够进入项目的下一部分真是太好了@彼得,永远欢迎你。在这里,我列出了一些最有价值的XSLT/XPath资源:这一个对我来说不起作用,但感谢您的帮助@Peter:它有效(我已经用测试更新了答案)。别担心,迪米特的答案比我的好得多。
<DETAILS>
   <SOMETHING>Here</SOMETHING>
</DETAILS>
<SOMEWHATIMPORTANT>This</SOMEWHATIMPORTANT>