我正在尝试使用powershell创建xml文件,并在我的第二层节点中添加一个空xmlns=""
。谷歌认为这是因为父母和孩子之间的命名空间不同,我怎样才能在生成时使它们相同?
我的powershell代码位于
之下$gNamespace = "http://schemas.microsoft.com/wix/2006/wi"
$xmlFilePath = "PATH_TO_XML_FILE"
$xmlWriter = New-Object System.XMl.XmlTextWriter($xmlFilePath, $Null)
$xmlWriter.Formatting = 'Indented'
$xmlWriter.Indentation = 1
$XmlWriter.IndentChar = "`t"
$xmlWriter.WriteStartDocument()
$xmlWriter.WriteStartElement("Wix", $gNamespace)
$xmlWriter.WriteEndElement()
$xmlWriter.WriteEndDocument()
$xmlWriter.Finalize
$xmlWriter.Flush()
$xmlWriter.Close()
$xmlDoc = [System.Xml.XmlDocument](Get-Content $xmlFilePath);
$nsmgr = new-object System.Xml.XmlNamespaceManager($xmlDoc.NameTable)
$nsmgr.AddNamespace("wixns", $gNamespace)
$xmlDoc = [System.Xml.XmlDocument](Get-Content $xmlFilePath)
$productNode = $xmlDoc.CreateElement("Product")
$xmlDoc.SelectSingleNode("//wixns:Wix", $nsmgr).AppendChild($productNode)
$productNode.SetAttribute("Id", "ProductIdHere")
上面的代码生成以下xml
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="ProductIdHere" xmlns=""/>
</Wix>
我的预期结果是
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="ProductIdHere"/>
</Wix>
如何在PowerShell生成xml时使父级和子级之间的命名空间相同?并选择具有命名空间的正确节点?
感谢您的帮助。
答案 0 :(得分:1)
在PowerShell中有更简单的方法可以做到这一点。看一下这个例子here
从这里你可以创建你的XML,例如如下:
[xml]$doc = New-Object System.Xml.XmlDocument
$dec = $doc.CreateXmlDeclaration("1.0", $null, $null)
$doc.AppendChild($dec)
$root = $doc.CreateNode("element","WiX", "http://schemas.microsoft.com/wix/2006/wi")
$c = $doc.CreateNode("element", "Product", "http://schemas.microsoft.com/wix/2006/wi")
$c.SetAttribute("Id", "ProductIdHere") | Out-Null
$root.AppendChild($c) | Out-Null
$doc.AppendChild($root) | Out-Null
$doc.Save($pathToSave)
当然,您也可以将基本结构存储在字符串或文件中,然后将其转换为[xml]
,然后执行一些操作。