#xml #powershell #xpath
#xml #powershell #xpath
Вопрос:
У меня есть XML-документ $books
, который использует пространства имен, и я попытался создать XML namespacemanager с помощью чего-то вроде $ns = New-Object System.Xml.XmlNamespaceManager($books.NameTable)
. Я не совсем уверен, что я делаю неправильно после этого. Я пытаюсь использовать SelectSingleNode()
для поиска в документе XML для определенных узлов, которые мне нужны, но все мои запросы XPath возвращают null.
Вот фрагмент XML-документа:
<ernm:NewReleaseMessage xmlns:ernm="http://ddex.net/xml/ern/341" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" LanguageAndScriptCode="en" MessageSchemaVersionId="/ern/341" xs:schemaLocation="http://ddex.net/xml/ern/341 http://ddex.net/xml/ern/341/release-notification.xsd">
<MessageHeader>
<MessageId>123123</MessageId>
<MessageRecipient>
<PartyId>567567</PartyId>
<PartyName>
<FullName>John Smith</FullName>
</PartyName>
</MessageRecipient>
</MessageHeader>
</ernm:NewReleaseMessage>
Кроме того, вот немного из того, что я пробовал до сих пор, чтобы начать SelectSingleNode()
работать правильно:
[xml]$books = Get-Content xmlpath.xml
$ns = New-Object System.Xml.XmlNamespaceManager($books.NameTable)
$ns.AddNamespace("ns", $books.DocumentElement.NamespaceURI)
$books.SelectSingleNode("//newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//ns:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//ernm:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//xmlns:newreleasemessage", $ns) #returns null
$books.SelectSingleNode("//xml:newreleasemessage", $ns) #returns null
Я также пробовал другие узлы, newreleasemessage
и он по-прежнему возвращается пустым, я просто хотел привести несколько примеров того, что я пробовал. Как правильно использовать пространства имен здесь?
Ответ №1:
Запросы XPath чувствительны к регистру. Это работает:
$books.SelectSingleNode("//ns:NewReleaseMessage", $ns)
Комментарии:
1. Господи, я чувствую себя глупо. Спасибо, поддержите. Почему это не указано в верхней части каждого отдельного введения xpath !?
2. Потому что это проблема только для людей, которые последние несколько лет писали на языках, не чувствительных к регистру, и они в меньшинстве.