只从xml中获取子元素,不使用xslt修改数据



你能帮我一下吗?我有一个文档

<?xml version="1.0" encoding="UTF-8"?>
<Transport version="1.0">
<Car>
<Model version="1.0">
<!-- some comment -->
<ENGINE>
<water>blue</water>
<S00589>
<E005766>Test</E005766>
</S00589>
</ENGINE>
<OIL>
<E007412>test</E007412>
<E1450062>test</E1450062>
</OIL>
<!-- some comment -->
</Model>
</Car>
</Transport>

和我需要得到孩子与文本,属性和标签模型。我尝试使用xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:copy-of select="//Model/node()"/>
</xsl:template>
</xsl:stylesheet>

但是我在输出前后得到空行。当我使用xslt

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:copy-of select="//Model/*"/>
</xsl:template>
</xsl:stylesheet>

我得到了正确的信息,但是我丢失了空格;我要拿到原文。这对我很重要。我期望这个输出

<ENGINE>
<water>blue</water>
<S00589>
<E005766>Test</E005766>
</S00589>
</ENGINE>
<OIL>
<E007412>test</E007412>
<E1450062>test</E1450062>
</OIL>

我想获得以<ENGINE>开始并以</OIL>结束的文本。我没有得到<Model version="1.0"><ENGINE>之间的空格,但我需要获取<ENGINE><water>blue</water>之间有空格的文本。我想要得到原始文本。非常感谢。如果我对这个问题描述得不好,我很抱歉,这是我第一次来这里。我只想得到突出显示的内容预期结果

我认为获得类似于您所显示的输出的最简单方法是:

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

从原始XML中复制空白文本节点;它为输出创建新的缩进。

如果您确实想复制原始缩进,但要删除开始和结束的空白文本节点(不确定为什么需要这样做),您可以这样做:

<xsl:stylesheet version="1.0"
xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="//Model/node()"/>
</xsl:template>
<xsl:template match="Model/text()[1] | Model/text()[last()]"/>
</xsl:stylesheet>

注意,这两种情况的结果都是一个XML片段。格式良好的XML文档必须有一个根元素。

最新更新