Схема XML с данными?Как мне разобрать это с JS? - PullRequest
1 голос
/ 14 января 2012

У меня есть XML-файл следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="event">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="id" type="xsd:integer">55147</xsd:element>
            <xsd:element name="opponent" type="xsd:string">Mount Pleasant</xsd:element>
            <xsd:element name="game_date" type="xsd:string">2012-01-09</xsd:element>
            <xsd:element name="start_time" type="xsd:string">6:00pm</xsd:element>
            <xsd:element name="end_time" type="xsd:string"></xsd:element>
            <xsd:element name="sport" type="xsd:string">Basketball</xsd:element>
            <xsd:element name="level" type="xsd:string">Freshman</xsd:element>
            <xsd:element name="gender" type="xsd:string">Boys</xsd:element>
            <xsd:element name="year" type="xsd:string">2012</xsd:element>
            <xsd:element name="season" type="xsd:string">Winter</xsd:element>
            <xsd:element name="status" type="xsd:string"></xsd:element>
            <xsd:element name="homeaway" type="xsd:string">Away</xsd:element>
            <xsd:element name="facility"></xsd:element>
            <xsd:element name="facility_id" type="xsd:integer"></xsd:element>
            <xsd:element name="opponent">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="ss_id" type="xsd:integer">126</xsd:element>
                        <xsd:element name="name" type="xsd:string">Mount Pleasant</xsd:element>
                        <xsd:element name="score" type="xsd:string"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="location">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="ss_id" type="xsd:integer">1700</xsd:element>
                        <xsd:element name="name" type="xsd:string">Mt. Pleasant High School</xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="score">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="result" type="xsd:string"></xsd:element>
                        <xsd:element name="ours" type="xsd:string"></xsd:element>
                        <xsd:element name="theirs" type="xsd:string"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="league" type="xsd:string"></xsd:element>
            <xsd:element name="type" type="xsd:string">Game</xsd:element>
            <xsd:element name="ss_id" type="xsd:string">7504900</xsd:element>
            <xsd:element name="transportation" type="xsd:string"></xsd:element>
            <xsd:element name="dismissal" type="xsd:string"></xsd:element>
            <xsd:element name="return" type="xsd:string"></xsd:element>
            <xsd:element name="comment">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="school" type="xsd:string"></xsd:element>
                        <xsd:element name="conference" type="xsd:string"></xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Я пытался:

var itemList = xml.documentElement.getElementsByTagName("event");
var game_date = itemList.getElementsByTagName("game_date").text;

в javascript, чтобы иметь возможность проанализировать это и получить информацию из него. Я хотел бы прочитать из тегов здесь с данными в них. У меня проблемы с извлечением данных, так как это выглядит как схема с данными. Это должно произойти?

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Поскольку структура XML довольно сложна, я бы использовал XPath для извлечения информации. Чтобы немного усложнить ситуацию, вам нужна функция распознавания пространства имен для обработки префиксов xsd.

// Namespace resolver function
function nsResolver(prefix) {  
  var ns = {  
    'xsd' : 'http://www.w3.org/2001/XMLSchema'
  };  
  return ns[prefix] || null;  
} 

Код извлечения

// Get a NodeList of all "event" elements
var eventNodeList = document.evaluate('/xsd:schema/xsd:element[@name="event"]', document, nsResolver, XPathResult.ANY_TYPE, null );  

// Iterate over events
var currentEvent = eventNodeList.iterateNext();  
while (currentEvent) {  
  // Get value from "game_date" element
  var gameDate = document.evaluate('/xsd:complexType/xsd:sequence/xsd:element[@name="game_date"]/text()', currentEvent, nsResolver, XPathResult.ANY_TYPE,null).textContent

  // Do something with the value
  // ...

  // Get next event element
  currentEvent = eventNodeList.iterateNext();  
}
0 голосов
/ 14 января 2012

Указанный файл XML является схемой XML (xsd).Схема XML сама по себе является документом XML, но она описывает структуру, контракт на допустимых элементах, атрибутах и ​​значениях документов XML, которые утверждают, что придерживаются схемы.

Если вы изучаете код javascriptвы, например, пытаетесь извлечь элементы с именем тега «событие», тогда как в указанной схеме XML есть элементы с именами «xsd: element», «xsd: sequence» и т. д.Что немного сбивает с толку, так это то, что схема XML на самом деле содержит значения, что не является распространенным явлением.Возможно, это попытка проиллюстрировать значения?

Экземпляр или документ XML вышеуказанной схемы XML будет выглядеть примерно так

<event>
  <id>55147</id>
  <opponent>Mount Pleasant</opponent>
  ....
</event>
...