[英]XPath expression to ignore the child nodes
我有以下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表達式? 如果我的問題不清楚,請告訴我。 提前致謝。
這是一個模板,將僅輸出<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]
您嘗試過count
方法嗎?
/response/folder/*[count(*)=0]
XPath是一種從XML樹中選擇特定節點的方法,但它本身不能更改任何這些節點的內容。 如果使用表達式選擇folder
元素
/response/folder
那么您將獲得整個元素的全部內容,包括case
子元素。 您可以使用以下命令在folder
下僅選擇“葉子”元素
/response/folder/*[not(*)]
這將為您提供一個包含兩個元素( TestOne
和TestTwo
)的節點集,但是將這兩個元素組合成一個新的 folder
元素並不是XPath可以為您做的。 您必須自己使用用於評估XPath表達式的語言/工具提供的任何功能來做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.