我将一个源文件从一个源文件中将我的powershell脚本从一个网页拉到一个本地文件中。拉出的文件保存到硬盘驱动器,看起来很好。需要将此XML文件推送到另一个站点,但由于某些节点数据未进行URL编码,因此无法对其进行XML架构验证。原始XML文件在CDATA标记中包含此数据,但另一个站点仍然无法通过验证,并且对它们的调用表明所有数据都需要进行URL编码。在PowerShell中有没有办法读取XML文件的内容,URL只对内容进行编码并将其写回来?我试着使用这段代码:
Add-Type -AssemblyName System.Web
Get-ChildItem d:\temp\bvproductfeed.xml | % {
$encoded = [System.Web.HttpUtility]::UrlEncode($(get-content $_.FullName))
$encoded | Out-File $_.FullName -Force
}
但是这会对整个文件进行编码。我只需要编码节点中的文本,而不是整个文件。
以下是我需要阅读的XML示例
<?xml version="1.0" encoding="utf-8"?>
<Feed xmlns="https://foo.bar/xs/15.3" name="Foo Products" incremental="false" extractDate="2017-10-20T13:21:41">
<Brands>
<Brand>
<ExternalId>Test</ExternalId>
<Name>Test Name</Name>
<Names>
<Name locale="en_US">Test US</Name>
<Name locale="sp_MX">Test Mexico</Name>
</Names>
</Brand>
</Brands>
<Categories>
<Category>
<ExternalId>Foo</ExternalId>
<Name>Widget</Name>
<CategoryPageUrl><![CDATA[http://foo.com/widget></CategoryPageUrl>
<ImageUrl>http://foo.com/imageeditor/widget.jpg</ImageUrl>
<ParentExternalId>Bar</ParentExternalId>
</Category>
</Categories>
<Products>
<Product>
<ExternalId>90084</ExternalId>
<Name>Foo-bar item 1</Name>
<Description><![CDATA[<p>Description data with HTML tags ]]></Description>
<BrandExternalId>test</BrandExternalId>
<CategoryExternalId>Foo</CategoryExternalId>
<ProductPageUrl><![CDATA[http://foo.com/90084]]></ProductPageUrl>
<ImageUrl>http://foo.com/imageeditor/90084.jpg</ImageUrl>
<ModelNumbers>
<ModelNumber>90084</ModelNumber>
</ModelNumbers>
<ManufacturerPartNumbers>
<ManufacturerPartNumber>90084</ManufacturerPartNumber>
</ManufacturerPartNumbers>
<UPCs>
<UPC>081483007601</UPC>
</UPCs>
<Attributes>
<Attribute id="BV_FE_FAMILY">
<Value>Foo-bar</Value>
</Attribute>
<Attribute id="BV_FE_FAMILY">
<Value>Foo</Value>
</Attribute>
<Attribute id="BV_FE_FAMILY">
<Value>Bar</Value>
</Attribute>
</Attributes>
</Product>
</Products>
</Feed>
要遍历许多品牌,类别和产品,但每个都有这种结构。有CDATA标签需要编码,但对于其他公司,他们的要求是所有值都是URLEncoded。
感谢。