2016-10-12 2 views
0

Я пытаюсь прочитать содержимое файла package.xml из wsussncn2.cab, содержащего список исправлений/исправлений от Microsoft, чтобы выполнить поиск всех доступных файлы для продуктов Windows 2008R2 и 2012 R2. Я извлекаю файл с wsusscn2.cab. Файл Package.xml довольно большой, но кажется, что я могу читать с помощью PowerShell. Другие программы, такие как редакторы, терпят неудачу.Чтение XML-содержимого файла package.xml из wsusscn2.cab

С PowerShell Я использую использовать такой код для выполнения некоторых поисков:

[xml]$xdoc = gc .\package.xml 
$xdoc | Select-Xml "//OfflineSyncPackage" 

или

$xdoc | Select-Xml "//Updates" 

или любой другой категории, это ничего не возвращает.

Но когда я использую:

$xdoc.SelectNodes("/*/*/*") 

тогда я был в состоянии получить информацию из него, а также если доступ, как если бы это был объект:

$xdoc.OfflineSyncPackage.Updates.update.Categories.Category 

Вы знаете, почему я не может использовать Select-Xml или почему я должен выбрать для всех с '*' в SelectNodes()?

Как я могу выполнить поиск по XML для этого файла?

ответ

0

XML-использует пространство имен:

<?xml version="1.0" encoding="utf-8"?> 
<OfflineSyncPackage MinimumClientVersion="5.8.0.2678" 
    ProtocolVersion="1.0" 
    PackageId="f27201b9-eca7-43ee-aed8-f7a2cddfec8b" 
    SourceId="cc56dcba-9026-4399-8535-7a3c9bed7086" 
    CreationDate="2016-10-10T22:40:27Z" 
    PackageVersion="1.1" 
    xmlns="http://schemas.microsoft.com/msus/2004/02/OfflineSync"> 
    <Updates> 
    ... 
    </Updates> 
</OfflineSyncPackage>

так что вам нужен менеджер пространства имен для работы с ними, как это:

[xml]$xdoc = gc .\package.xml 

$nsm = New-Object Xml.XmlNamespaceManager($xdoc.NameTable) 
$nsm.AddNamespace('ns', $xdoc.DocumentElement.NamespaceURI) 

$xdoc.SelectNodes('//ns:Updates', $nsm) 

или как это:

[xml]$xdoc = gc .\package.xml 
$ns = @{ns='http://schemas.microsoft.com/msus/2004/02/OfflineSync'} 

Select-Xml -Xml $xdoc -Namespace $ns -XPath '//ns:Updates' 
+0

Привет, спасибо. Для меня это первый раз, когда мне придется использовать XML NameSpaces. –