我有一个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中能够解析它并从中获取信息。我想从这里的标签中读取数据。我在将数据拉出时遇到问题,因为这看起来像是一个包含数据的模式。这应该发生吗?
答案 0 :(得分:2)
由于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();
}
答案 1 :(得分:0)
指定的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>