我试图提取有关适用于许多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')"
}
还是有其他原因导致我无法访问这些节点?
答案 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.