簡體   English   中英

XPath表達式忽略子節點

[英]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(*)]

這將為您提供一個包含兩個元素( TestOneTestTwo )的節點集,但是將這兩個元素組合成一個新的 folder元素並不是XPath可以為您做的。 您必須自己使用用於評估XPath表達式的語言/工具提供的任何功能來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM