powershell - 将webrequest结果转换为XML时出错

时间:2018-02-13 12:05:48

标签: xml powershell unicode byte-order-mark

我想处理这样的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<ns:Documents xmlns:tc="http://fsrar.ru/WEGAIS/Ticket" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="1.0">
  <ns:Owner>
    <ns:FSRAR_ID>3463047</ns:FSRAR_ID>
  </ns:Owner>
  <ns:Document>
    <ns:Ticket>
      <tc:TicketDate>2018-02-08T17:29:09.3041792</tc:TicketDate>
      <tc:Identity />
      <tc:DocId>2E47720A-58BC-4AF0-9159-5AD6A40C9792</tc:DocId>
      <tc:TransportId>38d9de5a-dd41-44ca-9ef3-0e404fef4bce</tc:TransportId>
      <tc:RegID>A13322D0-CB7F-455B-A7C6-C0CDC2AA4471</tc:RegID>
      <tc:DocHash />
      <tc:DocType>AsiiuTimesign</tc:DocType>
      <tc:Result>
        <tc:Conclusion>Accepted</tc:Conclusion>
        <tc:ConclusionDate>2018-02-08T17:29:09.3041792</tc:ConclusionDate>
        <tc:Comments>Документ успешно принят системой на обработку.</tc:Comments>
      </tc:Result>
    </ns:Ticket>
  </ns:Document>
</ns:Documents>

由于Invoke-WebRequest而得到的结果:

$url = "http://server/queue"
$webpage = ([xml]((Invoke-WebRequest -TimeoutSec 60 $url).Content))

我得到的是一个错误:

Cannot convert value "<xml body goes here>" to type "System.Xml.XmlDocument". Error: "The specified node cannot be inserted as the valid child of this node, because 
the specified node is the wrong type."
At line:5 char:1
+ $webpage = ([xml]((Invoke-WebRequest -TimeoutSec 60 $url).Content))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastToXmlDocument

有人可以建议为什么我不能将Invoke-WebRequest的结果转换为XML类型以及如何处理它?<​​/ p>

修改

好的,我尝试将请求内容保存到文件并在HEX编辑器中查看,现在我看到该文件以ff fe ff fe开头。我还对另一个URL执行了另一个请求,结果的内容正在向XML投射,结果发现它在开始时只有ff fe。我从文件中删除了第一个ff fe,在脚本中读取它并成功地转换为XML。

现在我看到响应的内容本身就有BOM,但是当我运行时($ response).Content我得到一个包含两个BOM的字符串。为什么以及如何只使用一个BOM获得正确的字符串?

0 个答案:

没有答案