我正試圖使用 Windows PowerShell 從 https://pinvoke.net 中決議 一個頁面。通常,當我有一個XML字串時,我可以通過將字串轉換為[xml]型別來將其轉換為更容易操作的物件。然而,當我試圖決議下面的頁面時,我得到一個錯誤。它不喜歡第14行的src屬性:
$page = ( Invoke-WebRequest https://www.pinvoke.net/default.aspx/advapi32/CreateProcessAsUser.html ).Content
$xmlPage = [xml]$page # 拋出一個錯誤
錯誤(被截斷了,因為訊息看起來包括了整個頁面的內容):
不能將值 "這里的XML STRING "轉換為 "System.Xml.XmlDocument "型別。
錯誤。"'src'是一個意外的標記。預期的標記是'='。第14行,第15位。"
這一行看起來像這樣:
這一行看起來像這樣。
<script async src = "https://www. googletagmanager.com/gtag/js?id=UA-115015704-1" ></script>/span>
如果我將 XML 復制到一個檔案中,并洗掉該行或洗掉 async,然后讀取該檔案并嘗試再次轉換,它就會進一步發展,但我一直遇到額外的 XML 錯誤(在我因額外的決議錯誤而放棄之前,共有兩個 async 屬性被洗掉)。
為什么用[xml]進行鑄造轉換會失敗?
編輯:
看起來像ConvertTo-Xml將.NET物件轉換為一個XML字串。它在XmlDocument型別下表示,但我最多只能從它中提取出相同的字串。我已經相應地重新命名了這個問題,并洗掉了ConvertTo-Xml對我來說是正確作業的陳述句。
uj5u.com熱心網友回復:
雖然像async這樣的布爾屬性是一個有效的HTML屬性,但它不是一個有效的XML屬性(read more)。因此,轉換為XML失敗的說法是正確的。
你得到了不同的結果,因為通過型別轉換到[xml]的轉換確實試圖將內容決議為XML,而ConvertTo-Xml做了完全不同的事情。看看下面這個命令的結果:
('< script async src = "test. js"></script> ' | ConvertTo-Xml).OuterXml
輸出:
<?xml version="1.0" encoding="utf-8"?><Objects><Object Type="System.String"><script async src = "test.js"></script></Object></Objects>
純字串被轉換為一個XML元素的內部文本。我想,這不是你想要的。
ConvertTo-Xml被設計為:
為一個或多個.NET物件創建一個基于XML的表示。
它不會將包含XML的字串轉換為XML。
并不是每個HTML頁面都由純XML組成。因此,您不能依賴將每個網站決議為 XML。不過有XHTML,它是有效的XML。在XHTML中,腳本標簽應該是這樣的:
< script async="async" src = "test. js"></script>
async屬性可以有任何其他的值,準確地說,只要它有一個值(閱讀更多)。
在你的案例中,我建議將網站決議為HTML。Invoke-WebRequest已經為你做到了:
$html = ( Invoke-WebRequest https://www.pinvoke.net/default.aspx/advapi32/CreateProcessAsUser.html ).ParsedHtml
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/307726.html
標籤:
