需要找出xpath来获取兄弟节点

时间:2011-12-21 20:41:30

标签: xpath

我必须将某个兄弟节点返回到我用来选择两个节点的某个父节点的节点...

...假设

<?xml version="1.0" encoding="utf-16"?>
<dataTemplateSpecification id="id1" name="name1">
<templates xmlns="">
<template>
  <elements>
    <element id="element0" name="PatientId" display="Patient ID" dataType="String" visable="true" readOnly="false" value="32">
      <mapping path="//Template/TemplateData/ACOData/PATIENT_ID" />
      <validation>
        <rules>
          <rule id="r0" test="#element0.value == ''">
            <fail>
              <html>
                <b>Patient ID is null, value must be present</b>
              </html>
            </fail>
          </rule>
        </rules>
      </validation>
    </element>
    <element id="element4" name="Active" display="ACTIVE" dataType="String" visable="true" readOnly="true" value="A">
      <mapping path="//Template/TemplateData/ACOData/ACTIVE" />
      <!--//Templates/Patient/sources/source/empi"/>-->
      <validation>
        <rules>
          <rule id="r1" test="#element1.value == ''">
            <fail>
              <html>
                <b>EMPI ID is null, value must be present</b>
              </html>
            </fail>
          </rule>
        </rules>
      </validation>
    </element>
    <element id="element2" name="PopulationPatientID" display="Population Patient ID" dataType="String" visable="true" readOnly="true" enc="223" value="198">
      <mapping path="//Template/TemplateData/ACOData/POPULATION_PATIENT_ID" />
      <!--Patient/compositeID[./idType='populationPatientID']/id-->
      <validation>
        <rules>
          <rule id="r1" test="#element1.value == ''">
            <fail>
              <html>
                <b>EMPI ID is null, value must be present</b>
              </html>
            </fail>
          </rule>
        </rules>
      </validation>
    </element>
    <element id="element1" name="EncounterId" display="Encounter ID" dataType="String" visable="true" readOnly="false" value="223">
      <mapping path="//Template/TemplateData/ACOData/FOCUSED_READMISSIONS_ID" />
      <validation>
        <rules>
          <rule id="r0" test="#element0.value == ''">
            <fail>
              <html>
                <b>Patient ID is null, value must be present</b>
              </html>
            </fail>
          </rule>
        </rules>
      </validation>
    </element>

我现在拥有的Xpath目前只能获得正确的模板。但我需要正确的元素......

//dataTemplateSpecification/templates/template[./elements/element[@name="PopulationPatientID" and @value="198" and @enc="223"]]

我需要xpath到具有名为“Active”属性的节点是否可能?我以为我可能需要在[]部分钻取后缀...你知道[./../../]我会在那之前以更精细的粒度选择... // dataTemplateSpecification / templates / template /elements/element[./../../]等..这有意义还是我在这里完全漫无目的?任何帮助,将不胜感激。感谢。

3 个答案:

答案 0 :(得分:2)

您使用XPath搜索获取模板而不是元素的原因是因为您正在搜索模板。

// dataTemplateSpecification / templates / template [./ elements / element [@ name =“PopulationPatientID”and @ value =“198”and @ enc =“223”]]

如果你想要这个元素,你需要在XPath语句的谓词部分之前指定它(谓词是[]或括号中的部分。)

此外,如果您要查找具有值为“Active”的 name 属性的元素,则可以将其指定为XPath语句的一部分。

以下任何一个语句都会获得名称为“Active”的元素:

/dataTemplateSpecification/templates/template/elements/element[@name = 'Active']

//element[@name = 'Active']

答案 1 :(得分:1)

使用

/*/*/*/*/element
          [@name="PopulationPatientID" and @value="198" and @enc="223"]
            /preceding-sibling::element[1]

甚至更简单

/*/*/*/*/element[@name='Active']

答案 2 :(得分:0)

@royerboat和@Dimitre Novatchev ......

你们两个人都有正确的想法,这激励我获得我需要的Xpath ......

//dataTemplateSpecification/templates/template[./elements/element[@name="PopulationPatientID" and @value="198" and @enc="223"]]//element[@name = 'Active']

xpath正是我需要的。迪米特,我试过你的两个吸烟,他们走得很近,但没有雪茄。谢谢你的帮助。