Нужно выяснить xpath, чтобы получить узел-брат - PullRequest
1 голос
/ 22 декабря 2011

Я должен вернуть определенный узел, который является родственным узлом, узлу, который я использую для выбора определенного родителя обоих узлов ...

предположим ...

<?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 ]

2 голосов
/ 22 декабря 2011

Причина, по которой вы получаете шаблон вместо элемента поиска XPath, заключается в том, что вы ищете шаблон.

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

Если вы хотите вместо этого элемент, вам нужно указать его перед частью предиката в операторе XPath (предикат является частьюв [] или в скобках).

Кроме того, если вы ищете элемент с атрибутом name , который имеет значение «Active», вы можете указать его как часть своего XPathStatement.

Любой из следующих операторов получит элемент с именем «Active»:

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

//element[@name = 'Active']
1 голос
/ 22 декабря 2011

Использование :

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

или даже проще :

/*/*/*/*/element[@name='Active']
0 голосов
/ 22 декабря 2011

@ royerboat и @Dimitre Novatchev ...

у вас обоих была правильная идея, и это вдохновило меня на получение нужного мне Xpath ...

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

Этоxpath это именно то, что мне нужно.Димитр, я попробовал оба твоих предложения, и они подошли близко, но без сигары.Спасибо за помощь, ребята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...