使用PowerShell从manifest.xsf文件提取数据

时间:2019-06-14 07:08:21

标签: xml powershell

我试图提取有关适用于许多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 :(得分:0)

通过将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.
相关问题