Извлечение данных из файла manifest.xsf с помощью PowerShell - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь извлечь информацию о правилах, которые применяются к ряду форм InfoPath, и для этого я использую Powershell.

Я распаковал файл template.xsn и нашел файл manifest.xsf, в котором хранятся эти данные.

Используя Powershell [xml]$ProjectXmlFile = Get-Content manifest.xsf для получения XML-данных, я изо всех сил пытаюсь правильно определить узлы.

Узлы идентифицируются с использованием прекурсора "xsf:", например:

<xsf:submit caption="Submit" disableMenuItem="no" onAfterSubmit="close" showStatusDialog="no">
    <xsf:errorMessage>The form cannot be submitted because of an error.</xsf:errorMessage>
    <xsf:davAdapter name="SharePoint Library Submit" submitAllowed="yes" overwriteAllowed="no">
        <xsf:folderURL value="../"></xsf:folderURL>
        <xsf:fileName value="my:Submit/my:ref" valueType="expression"></xsf:fileName>
    </xsf:davAdapter>
</xsf:submit>

Как идентифицировать эти узлы, чтобы вывести информацию как обычные данные XML (т. Е. Если узлы не имели префикса «xsf:» к ним)?

Вот что я пытался использовать:

foreach ($DataQuery in $ProjectXmlFile.'xsf:xDocumentClass'.'xsf:dataObjects'.'xsf:dataObject'.'xsf:query'.'xsf:sharepointListAdapterRW')
 {
        Write-Host "DataQuery.name = $($DataQuery.'xsf:name')"
}

Или есть еще одна причина, по которой я не могу получить доступ к этим узлам?

1 Ответ

0 голосов
/ 14 июня 2019

Установив для свойства XmlTextReader.Namespaces значение $false, вы можете отключить поддержку пространства имен.

$x = @'
<xsf:submit caption="Submit" disableMenuItem="no" onAfterSubmit="close" showStatusDialog="no">
    <xsf:errorMessage>The form cannot be submitted because of an error.</xsf:errorMessage>
    <xsf:davAdapter name="SharePoint Library Submit" submitAllowed="yes" overwriteAllowed="no">
        <xsf:folderURL value="../"></xsf:folderURL>
        <xsf:fileName value="my:Submit/my:ref" valueType="expression"></xsf:fileName>
    </xsf:davAdapter>
</xsf:submit>
'@
$xml = New-Object -TypeName System.Xml.XmlDocument
$sr = New-Object -TypeName System.IO.StringReader $x
$xtr = New-Object -TypeName System.Xml.XmlTextReader $sr
$xtr.Namespaces = $false
$xml.Load($xtr)
$xml.'xsf:submit'.'xsf:errorMessage'

Вывод:

The form cannot be submitted because of an error.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...