我正在尝试做与this question类似的事情。
我有一个很长的复杂OAGIS模式,并且通过使用文本编辑器,我在XSLT中找到了要映射的元素。现在,我需要找到该元素的父结构。我使用的是MS-BizTalk,架构编辑器不适用于在超大型架构中查找这样的内容。
所以输入是一个xsd模式文件,它当然是XML本身。
它因错误而死:
方法调用失败,因为[System.Xml.XmlElement]没有 包含一个名为“ ParentNode”的方法。
我不明白该错误,因为除根之外,所有节点都应有一个父节点,对吗?
cls
$schemaFile = "C:\Users\nealw\Source\Repos\BizTalk2016\OAGIS_10_5_Schemas\OAGIS_10_5_Schemas.Shipment\Schemas\ProcessShipment.xsd";
$elementName = "PaymentAuthorization"
$xpath = "//*[local-name()='element'][@ref='$elementName']"
write-host "xpath=$xpath"
write-Host ""
[xml]$xml = Get-Content $schemaFile
$node = $xml.SelectSingleNode($xpath)
write-host "xpath node = $($node.OuterXml)"
#now get the chain of parents until no more parents
$parentCounter = 0
while ($node.type -ne 'root')
{
$parentCounter = $parentCounter + 1
$node = $node.ParentNode()
Write-Host " ParentNode result:"
$node
write-host "$parentCounter - parentNode name=$($node.Name) ref=$($node.Attributes['ref']) name=$($node.Attributes['name']) Type=$($node.NodeType)) "
if ($node.Name -eq "sequence" -or $node.Name -eq "xsd:sequence")
{
$firstChildOfSequence = $node.FirstChild()
write-host " Seq:FirstChild: node = $($firstChildOfSequence.Name) ref=$($firstChildOfSequence.Attributes['ref']) name=$($firstChildOfSequence.Attributes['name'])"
}
}
它应找到的节点如下所示:
<xsd:element id="oagis-id-4a25b711cc324d12a1705cdada71ad8b" minOccurs="0" maxOccurs="1" ref="PaymentAuthorization">
,它的父母应该是一个序列。