除了打印节点的文本值之外,我的代码中的所有内容都有效。这是我的KML文件:
<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="root_doc">
<Schema name="AUS_POSTCODE_POLYGON_2015_05" id="AUS_POSTCODE_POLYGON_2015_05">
</Schema>
<Folder><name>AUS_POSTCODE_POLYGON_2015_05</name>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#AUS_POSTCODE_POLYGON_2015_05">
<SimpleData name="DT_CREATE">20150423</SimpleData>
<SimpleData name="POSTCODE">5700</SimpleData>
<SimpleData name="STATE_PID">4</SimpleData>
<SimpleData name="STATE">SA</SimpleData>
</SchemaData></ExtendedData>
<MultiGeometry><Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode>
<coordinates>137.745052224211719,-32.403930130629746 </coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#AUS_POSTCODE_POLYGON_2015_05">
<SimpleData name="DT_CREATE">20150423</SimpleData>
</SchemaData></ExtendedData>
<MultiGeometry><Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode>
<coordinates>139.971166832040183,-32.421544630638806</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#AUS_POSTCODE_POLYGON_2015_05">
<SimpleData name="DT_CREATE">20141021</SimpleData>
<SimpleData name="POSTCODE">5022</SimpleData>
<SimpleData name="STATE_PID">4</SimpleData>
<SimpleData name="STATE">SA</SimpleData>
</SchemaData></ExtendedData>
<MultiGeometry><Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode>
<coordinates>138.485436120358145,-34.875330494997144</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
</Placemark>
</Folder>
</Document></kml>
这是我的VBScript:
Dim fso, fPath , i, xpath, placemark, simpleDataNode, stateID, postCode
dim objxml
Set fso = CreateObject("Scripting.FileSystemObject")
fPath = fso.GetAbsolutePathName(fromFileName)
Set objxml = CreateObject("Msxml2.DOMDocument")
objxml.SetProperty "SelectionNamespaces", "xmlns:base=""http://www.opengis.net/kml/2.2"""
objXML.async = False
objXML.Load fPath
If 0 = objXML.ParseError Then
xpath = "//base:Placemark"
Set placemark = objXML.selectNodes(xpath)
writeLog placemark.length & " = how many nodes found"
If 0 < placemark.length Then
For Each simpleDataNode In placemark
Set stateID = simpleDataNode.selectSingleNode("ExtendedData/SchemaData/SimpleData[@name='STATE_PID']")
Set postCode = simpleDataNode.selectSingleNode("ExtendedData/SchemaData/SimpleData[@name='POSTCODE']")
If Not stateID Is Nothing Then
writeLog stateID.getAttribute("name")
'writeLog stateID.item(0).Text < gives me error
else
writeLog "no state node found "
end if
If Not postCode Is Nothing Then
writeLog postCode.getAttribute("name")
'writeLog postCode.item(0).Text < gives me error
else
writeLog "no postCode node node found "
end if
Next
Else
writeLog "not found |" & xpath & "|"
End If
Else
writeLog objXML.ParseError.Reason
End If
代码遍历每个Placemark节点并检测到:
这两个问题的这一行有效:
writeLog stateID.getAttribute("name")
但这一行没有:
writeLog stateID.item(0).Text < gives me error
它给我一个对象不支持这个属性或方法。如何打印节点文本值?
在浏览此Placemark节点时,我还想在坐标节点中打印地标文本。
这是输出。正如您所看到的,它正确告诉我第二个Placemark节点缺少状态和邮政编码节点:
3 = how many nodes found
STATE_PID
POSTCODE
no state node found
no postCode node node found
STATE_PID
POSTCODE
答案 0 :(得分:2)
stateID
和postCode
是简单(文本)节点,而不是集合。因此,请使用stateID.text
和postCode.text
。