Приведите пример выполнения запроса xpath для документа KML из Javascript. - PullRequest
2 голосов
/ 19 сентября 2011

Я изучаю использование xpath из Javascript.

У меня есть XMLHttpRequest (), который извлекает документ KML.KML - это особая разновидность XML.

Я получаю документ через xhr.responseXML, результат выглядит так:

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Style id="1">
      <IconStyle>
        <color>7f66CC33</color>
        <Icon>
          <href />
        </Icon>
      </IconStyle>
       ...
    </Style>
    <Folder>
      ....
    </Folder>
  </Document>
</kml>

Затем я хочу выполнить запросы к нему, чтобы выбрать узлы.

    xmlDom.setProperty("SelectionLanguage", "XPath");
    xmlDom.setProperty("SelectionNamespaces","xmlns='http://www.opengis.net/kml/2.2'");
    nodeList = xmlDom.selectNodes("/kml/Document/Folder");

Но это не работает для меня.Я ожидаю получить хотя бы один узел, но получаю ноль.

Q1: Кто-нибудь может объяснить, почему это не работает?

Когда я изучал это, я с удивлением обнаружил, что xpath не поддерживается в XML-документах вбраузер, в кросс-браузерной моде.Видимо функция selectNodes() предназначена только для IE?

Q2: Кто-нибудь может это подтвердить?

Если это так, то что мне следует делать для кросс-браузерного выбора узла из XML-документа изнутрибраузер.

В3. Как выполнять кросс-браузерные запросы XPath к документу XML?


ps: мне совершенно наплевать на "xpath"на HTML ".Это XML-документ, который я запрашиваю.

1 Ответ

5 голосов
/ 19 сентября 2011

У вас есть :

xmlDom.setProperty("SelectionLanguage", "XPath"); 
xmlDom.setProperty("SelectionNamespaces","xmlns='http://www.opengis.net/kml/2.2'"); 
nodeList = xmlDom.selectNodes("/kml/Document/Folder"); 

Должно быть :

xmlDom.setProperty("SelectionLanguage", "XPath"); 
xmlDom.setProperty("SelectionNamespaces","xmlns:x='http://www.opengis.net/kml/2.2'"); 
nodeList = xmlDom.selectNodes("/x:kml/x:Document/x:Folder"); 

Объяснение

Любое имя без префикса в выражении XPath, которое считается переведенным в «без пространства имен» .

Следовательно, выражение:

/kml/Document/Folder

пытается выбрать элементы с именем Folder, которые не находятся в "пространстве имен", но в предоставленных документах все элементы находятся в пространстве имен по умолчанию (не нулевом) http://www.opengis.net/kml/2.2, и в "нет пространства имен" нет элемента. Вот почему приведенное выше выражение XPath не может выделить ни один элемент.

Решением является , чтобы зарегистрировать привязку пространства имен префикса непустого к пространству имен по умолчанию и, что наиболее важно, использовать этот префикс для префикса любого имени в выражении XPath.

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