我希望跳過某些節點但無法弄清楚。我的目標是使用VBS文件中的XPath跳過某些節點
- 遍歷KML文件,停止在第一個[SimpleData name =「POA_2006」]節點並將值寫入日誌。這一切都很好。
- 跳進第一個[座標]節點並記錄所有座標。這很好。
- 現在我想跳過可能在特定部分/郵編中的任何其他[座標]節點。這沒有發生。我該怎麼做呢?
這裏是我的KML文件的一個非常削減版本:
<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="root_doc">
<Schema name="postcode" id="postcode">
<SimpleField name="STATE_2006" type="string"></SimpleField>
<SimpleField name="POA_2006" type="string"></SimpleField>
</Schema>
<Folder><name>postcode</name>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#postcode">
<SimpleData name="STATE_2006">1</SimpleData>
<SimpleData name="POA_2006">2000</SimpleData>
</SchemaData></ExtendedData>
<MultiGeometry><Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode>
<coordinates>151.20118275199999,-33.873293252 151.201538016</coordinates></LinearRing></outerBoundaryIs></Polygon><Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode>
<coordinates>151.225379008,-33.855265002 151.22524198400001</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
</Placemark>
<Placemark>
<Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
<ExtendedData><SchemaData schemaUrl="#postcode">
<SimpleData name="STATE_2006">1</SimpleData>
<SimpleData name="POA_2006">2006</SimpleData>
</SchemaData></ExtendedData>
<Polygon><altitudeMode>relativeToGround</altitudeMode><outerBoundaryIs><LinearRing><altitudeMode>relativeToGround</altitudeMode><coordinates>151.182640768,-33.891296046 151.18194374399997</coordinates></LinearRing></outerBoundaryIs></Polygon>
</Placemark>
</Folder>
</Document></kml>
和她是VBS文件代碼:
function readKLMFileAndWriteToFile2(toFileName, fromFileName)
Dim fso, fPath ,xXML
Set fso = CreateObject("Scripting.FileSystemObject")
fPath = fso.GetAbsolutePathName(fromFileName)
Set xXML = CreateObject("Msxml2.DOMDocument")
xXML.SetProperty "SelectionNamespaces", "xmlns:base=""http://www.opengis.net/kml/2.2"""
xXML.setProperty "SelectionLanguage", "XPath"
xXML.async = False
xXML.load fPath
dim simpleData, coords, ctr
ctr = 0
For Each simpleData In xXML.selectNodes("//base:SimpleData[@name='POA_2006']")
writeLog simpleData.text
set coords = xXML.selectNodes("//base:coordinates")
writeLog coords(ctr).text
ctr = ctr + 1
Next
end function
注意 - 該文件沒有錯誤以任何方式。問題是第一個郵政編碼(2000年)內第二個[座標]節點中的一組座標在其下一個郵政編碼(2006)的座標應填入其自身中。那麼如何跳過第二個[座標]節點?我在我現有的內部圖中對於每個SimpleData循環,我需要做一些棘手的事情,比如檢測在[postBlockaryIs]等兩個常見節點內有多少[座標]節點,我需要將這個數字添加到我的ctr變量。這個邏輯確實起作用,因爲我可以對它進行硬編碼並得到結果,但是Im有點卡住了。預先感謝您的幫助
更新 - 感謝您的意見。我從上面的示例KLM文件中刪除了不必要的座標,以便閱讀。根據這一變化,@MathiasMüller在此要求的是預期輸出(postCode,然後是第一個協調節點中的內容,然後跳轉到下一個郵政編碼,然後是這個新郵政編碼中第一個協調節點中的內容):
2000
151.20118275199999,-33.873293252 151.201538016
2006
151.182640768,-33.891296046 151.18194374399997
set coords = xXML.selectNodes(「// base:coordinates [1]」)的建議無效。
我也嘗試了建議的FOR循環。該代碼不喜歡(對象預期):
set coord = simpleData.selectSingleNode("./ancestor::base:ExtendedData/following-sibling::base:MultiGeometry//base:coordinates")