2017-02-17 25 views
1

мне нужен узел AX_Namensnummer где дочерний узел istBestandteilVon имеет значение атрибута urn:adv:oid:DEBBAL0600000Y09Выберите родительские узлы, которые имеют подзону с определенным атрибутом через XPath?

Вот небольшой отрывок из моего XML:

<enthaelt> 
     <wfs:FeatureCollection gml:id="A75"> 
     <gml:featureMember> 
      <AX_Namensnummer gml:id="DEBBAL0600000XUm"> 
       <gml:identifier codeSpace="http://www.adv-online.de/">urn:adv:oid:DEBBAL0600000XUm</gml:identifier> 
       <lebenszeitintervall> 
        <AA_Lebenszeitintervall> 
         <beginnt>2012-01-11T07:03:49Z</beginnt> 
        </AA_Lebenszeitintervall> 
       </lebenszeitintervall> 
       <modellart> 
        <AA_Modellart> 
         <advStandardModell>DLKM</advStandardModell> 
        </AA_Modellart> 
       </modellart> 
       <anlass>000000</anlass> 
       <laufendeNummerNachDIN1421>0001.00.00.00.00</laufendeNummerNachDIN1421> 
       <eigentuemerart>3000</eigentuemerart> 
       <istBestandteilVon xlink:href="urn:adv:oid:DEBBAL0600000Y09"/> 
       <benennt xlink:href="urn:adv:oid:DEBBAL0600000Y09"/> 
      </AX_Namensnummer> 
     </gml:featureMember> 
    </wfs:FeatureCollection> 
</enthaelt> 

здесь пространств имен:

<AX_Bestandsdatenauszug 
    xmlns="http://www.adv-online.de/namespaces/adv/gid/6.0" 
    xmlns:adv="http://www.adv-online.de/namespaces/adv/gid/6.0" 
    xmlns:gco="http://www.isotc211.org/2005/gco" 
    xmlns:gmd="http://www.isotc211.org/2005/gmd" 
    xmlns:gml="http://www.opengis.net/gml/3.2" 
    xmlns:ows="http://www.opengis.net/ows" 
    xmlns:wfs="http://www.adv-online.de/namespaces/adv/gid/wfs" 
    xmlns:wfsext="http://www.adv-online.de/namespaces/adv/gid/wfsext" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:ogc="http://www.adv-online.de/namespaces/adv/gid/ogc" 
    xsi:schemaLocation="http://www.adv-online.de/namespaces/adv/gid/6.0 NAS-Operationen.xsd"> 

my XPath:

.//{http://www.adv-online.de/namespaces/adv/gid/6.0}AX_Namensnummer/{http://www.adv-online.de/namespaces/adv/gid/6.0}istBestandteilVon[@{http://www.w3.org/1999/xlink}href='urn:adv:oid:DEBBAL0600000Y09'] 

Я получаю узел istBestandteilVon, но мне нужно AX_Namensnummer.

Что я делаю неправильно?

ответ

0

What am I doing wrong?

  • Не определения и использования префиксов пространств имен.
  • Не понимая, какие элементы находятся в пространствах имен, а какие нет.
  • Непонимание того, как пространства имен по умолчанию влияют на дочерние элементы.
  • Ориентация на значение @xlink:href, которое не существует на отмеченном элементах.
  • Размещение предиката у ребенка, а не родительского элемента.

Для этого XML (отремонтировали быть пространством имен хорошо сформированы и обновлены с учетом пространства имен по умолчанию в обновленной вопрос),

<?xml version="1.0" encoding="UTF-8"?> 
<AX_Namensnummer xmlns="http://www.adv-online.de/namespaces/adv/gid/6.0" 
       xmlns:gml="http://www.adv-online.de/namespaces/adv/gid/6.0" 
       xmlns:xlink="http://www.w3.org/1999/xlink" 
       gml:id="DEBBAL0600000XUm"> 
    <gml:identifier codeSpace="http://www.adv-online.de/">urn:adv:oid:DEBBAL0600000XUm</gml:identifier> 
    <lebenszeitintervall> 
     <AA_Lebenszeitintervall> 
     <beginnt>2012-01-11T07:03:49Z</beginnt> 
     </AA_Lebenszeitintervall> 
    </lebenszeitintervall> 
    <modellart> 
     <AA_Modellart> 
     <advStandardModell>DLKM</advStandardModell> 
     </AA_Modellart> 
    </modellart> 
    <anlass>000000</anlass> 
    <laufendeNummerNachDIN1421>0001.00.00.00.00</laufendeNummerNachDIN1421> 
    <eigentuemerart>3000</eigentuemerart> 
    <istBestandteilVon xlink:href="urn:adv:oid:DEBBAL0600000XOX"/> 
    <benennt xlink:href="urn:adv:oid:DEBBAL0600000Y09"/> 
</AX_Namensnummer> 

и для этого пространства имен,

xlink="http://www.w3.org/1999/xlink" 
adv="http://www.adv-online.de/namespaces/adv/gid/6.0" 

этот XPath,

//adv:AX_Namensnummer[adv:istBestandteilVon/@xlink:href='urn:adv:oid:DEBBAL0600000XOX'] 

будет содержать выберите родительский элемент AX_Namensnummer в соответствии с запросом.

Смотрите также:How does XPath deal with XML namespaces?

+0

Я добавил все пространства имен. Каждый раз, когда я пытаюсь использовать префикс, он говорит: «префикс не найден в префиксной карте» :( – Yuli

+0

Итак, там * есть * пространство имен по умолчанию. Ответ скорректирован для размещения 'adv =" http: //www.adv-online. de/namespaces/adv/gid/6.0 "' как пространство имен по умолчанию. – kjhughes

+0

Настоятельно рекомендую вам просмотреть, как пространства имен работают в XML и XPath. Например, убедитесь, что вы понимаете [*** Как XPath обрабатывает пространства имен XML ** *] (http://stackoverflow.com/questions/40796231/how-does-xpath-deal-with-xml-namespaces) – kjhughes

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

  • Нет связанных вопросов^_^