使用Powershell读取XML文件中的所有节点,并使用URLEncode编写内容

时间:2017-11-09 23:34:46

标签: xml powershell

我将一个源文件从一个源文件中将我的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。

感谢。

0 个答案:

没有答案