Javascript 带数据的XML模式?如何用JS解析它?

Javascript 带数据的XML模式?如何用JS解析它?,javascript,xml,parsing,schema,Javascript,Xml,Parsing,Schema,我有一个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>

我有一个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>

在javascript中,您可以解析它并从中获取信息。我想从标签中读取数据。我在提取数据时遇到问题,因为这看起来像是一个包含数据的模式。这应该发生吗?

指定的XML文件是XML模式(xsd)。XML模式本身就是一个XML文档,但它描述了一种结构,一种契约,它涉及声称遵守该模式的XML文档的允许元素、属性和值

例如,如果检查javascript代码,您将尝试提取标记名为“event”的元素,而指定的XML模式包含名为“xsd:element”、“xsd:sequence”等元素。稍微令人困惑的是,XML模式实际上包含值,这并不常见。也许这是一种价值观的例证

上述XML模式的XML实例或文档如下所示

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

55147
普莱森特山
....

由于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 );  
// var eventNodeList = document.evaluate('/xsd:schema/xsd:element[@name="event"]', document);  

// 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();  
}

此XML文件是从服务器提取的日历。我无法控制它。我需要做的就是解析它。有没有办法读取存储在这里的值?或者我需要做什么?这不是有效的XML模式。我鼓励任何制造这场混乱的人都能找到线索。
// Get a NodeList of all "event" elements
var eventNodeList = document.evaluate('/xsd:schema/xsd:element[@name="event"]', document, nsResolver, XPathResult.ANY_TYPE, null );  
// var eventNodeList = document.evaluate('/xsd:schema/xsd:element[@name="event"]', document);  

// 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();  
}