我希望跳过某些节点但无法弄清楚。我的目标是使用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")