2013-08-21 7 views
0

Я пытаюсь использовать XPATH для возврата родительского узла дочернего узла в XML, который не содержит содержимого в рамках процедуры PL/SQL.Извлечение родительских узлов указанного пустого дочернего узла

До сих пор у меня есть следующий XMLextract, который вернет родительу-оболочке дочернего узла, у которого есть идентификатор из 10 или 11, где p_xml_content - это мой XML-документ.

xmltype(p_xml_content).extract('//return/issueEventType[id=11] /../. | //return/issueEventType[id=10] /../.') 

Мне нужно преобразовать это утверждение, чтобы вернуть все теги возврата, которые содержат пустой объект completeDate.

Я думал вдоль линий этого, но не уверен, будет ли это работать:

xmltype(p_xml_content).extract('//return[completionDate=''] /../.') 

Есть идеи?

Приветствие

Jezzipin

+0

Пожалуйста, дайте нам образец XML в чтобы дать вам XPath-эссенцию. Возможно, вам понадобится // return // * [completeDate = '']/.. но для этого нам нужна структура XML –

ответ

1

В предположении, что «пустой узел completionDate» означает «элемент completionDate без какого-либо дочернего узла», что бы перевести completionDate[not(node())]

И «все тег возвратных, которые содержат поэтому пустой completionDate узел»переводит

//return[completionDate[not(node())]] 

Так попробуйте:

xmltype(p_xml_content).extract('//return[completionDate[not(node())]]') 

Ваше выражение, слегка измененное, //return[completionDate=""] также работает.

С следующего образца XML

<sample> 
    <return id="1"> 
     <completionDate></completionDate> 
     <otherData>some data</otherData> 
    </return> 
    <return id="2"> 
     <completionDate>2013-09-10</completionDate> 
    </return> 
    <return id="3"> 
     <completionDate /> 
     <otherDataAlt>more data</otherDataAlt> 
    </return> 
    <return id="4"> 
     <completionDate>2013-09-11</completionDate> 
     <otherDataAlt>alt data</otherDataAlt> 
    </return> 
    <return id="5"> 
     <completionDate></completionDate> 
    </return> 
    <return id="6"> 
     <completionDate /> 
    </return> 
</sample> 

как //return[completionDate=""] и //return[completionDate[not(node())]] возврата <return> узлов с идентификаторами 1, 3, 5 и 6. (проверено на http://www.xpathtester.com/ и http://www.freeformatter.com/xpath-tester.html)

+0

Можете ли вы объяснить, почему это сработает? – Daniel

+1

Я отредактировал свой ответ с объяснением, но я мог ошибаться в понимании «пустого дочернего узла» –

+0

Это предположение неверно, поскольку узлы могут содержать контент, а также дополнительные узлы. У моих узлов finalDate никогда не было дочерних объектов, таких как Date Here. Я хочу вернуть родительский узел, когда эти теги пусты, например. jezzipin

Смежные вопросы