我有以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<folder>
<TestOne>F</TestOne>
<TestTwo>01</TestTwo>
<case>
<CRDATTIM>2014-03-26-05.22.22.339840</CRDATTIM>
<RECORDCD>C</RECORDCD>
</case>
<case>
<CRDATTIM>2014-03-26-05.05.51.531840</CRDATTIM>
<RECORDCD>C</RECORDCD>
</case>
</folder>
</response>
我需要XPath表达式来立即读取<folder>
标记下的节点及其值。我不需要子节点信息。我的意思是,我提取的信息应如下所示:
<folder>
<TestOne>F</TestOne>
<TestTwo>01</TestTwo>
<folder>
此处<folder>
下列出的标签名称,即<TestOne>, <TestTwo>
是动态的。
有没有办法为上述要求派生XPath表达式?如果我的问题不明确,请告诉我。提前谢谢。
答案 0 :(得分:3)
这是一个仅输出<folder>
节点的直接子节点的模板:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/response/folder">
<folder>
<xsl:apply-templates select="node()" mode="childs"/>
</folder>
</xsl:template>
<xsl:template match="*" mode="childs">
<xsl:if test="count(./text()) = 1">
<xsl:element name="{local-name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
如果你刚刚在xpath之后获取文件夹节点中的所有节点:
/response/folder/node()[count(text()) = 1]
答案 1 :(得分:1)
您是否尝试过count
方法?
/response/folder/*[count(*)=0]
答案 2 :(得分:0)
XPath是一种从XML树中选择特定节点的方法,但它本身不能更改任何节点的内容。如果使用表达式选择folder
元素
/response/folder
然后你会得到整个元素,包括case
个孩子。您可以使用
folder
下的“叶子”元素
/response/folder/*[not(*)]
会为您提供包含两个元素(TestOne
和TestTwo
)的节点集,但会将这两个元素组合成 new folder
元素不是XPath可以为你做的事情。您必须使用您用来评估XPath表达式的语言/工具提供的任何工具来自己完成。