我在 Windows 的命令行中使用 tshark (wireshark) 捕获了一些数据包,然后以.xml
- 格式保存了文件。现在我想.xml
在命令行中读取该文件。
如何在命令行中读取 xml 文件?
答案1
假设您希望解析 SOAP 信封/包内的实际 XML,您可以使用 PowerShell 来实现 - 如果您希望解析实际的 SOAP 数据,则需要通过更高级语言的工作器来使用它,我不知道这是否可以通过 PowerShell 来实现。
关于将 SOAP 消息解析为 XML 结构 - 有效地忽略所有与 SOAP 相关的节点并获取实际嵌入的 XML:
您需要知道节点名称。例如:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <soap:Header> ... </soap:Header> <soap:Body> <encapsulatingNodeOfInterest> <childNodeOfInterest exampleAttribute="exampleValue"> exampleInnerContent </childNodeOfInterest> <childNodeOfInterestToo exampleAttribute="exampleValue"> exampleInnerContent </childNodeOfInterestToo> </encapsulatingNodeOfInterest> <soap:Fault> ... </soap:Fault> </soap:Body> </soap:Envelope>
...要选择的节点是
encapsulatingNodeOfInterest
。使用-argument 访问文件
-Path
并将其指向该文件:Select-Xml -Path ".\soap.xml"
添加-argument 来指定您想要选择的
-XPath
节点( ):encapsulatingNodeOfInterest
Select-Xml -Path ".\soap.xml" -XPath "//encapsulatingNodeOfInterest"
...这将输出节点、路径和模式
假设您希望遍历所有子节点,将节点“管道”
encapsulatingNodeOfInterest
到ForEach-Object
访问的循环中InnerXml
:Select-Xml -Path ".\soap.xml" -XPath "//encapsulatingNodeOfInterest" | ForEach-Object { $_.Node.InnerXml }
...这将输出节点内的所有子节点
encapsulatingNodeOfInterest
,即childNodeOfInterest
给定示例中的“childNodeOfInterestToo”。
注意:有关如何使用 Select-Xml 的示例,请访问带有 -attribute 的命令的帮助-Examples
:
Get-Help Select-Xml -Examples
答案2
假设您使用的是 Windows,则可以使用两种方法,具体取决于您所说的“在命令行中读取该 xml 文件”
使用类型
命令提示符知道一个名为的命令,type
该命令将文件的内容显示到显示器上。
C:\>type filename.xml
<xml file>
variable
</xml file>
C:\>_
如果 xml 文件很大,您可以将其传送到 more 命令,以便您当时看到一个页面。
C:\>type filename.xml | more
启动文件并让 Windows 使用默认的 xml 查看器打开它
另一个选项是让 Windows 使用默认的 xml 查看器打开文件。假设 Internet Explorer 是您的默认 xml 查看器,以下命令将启动 Internet Explorer,打开 XML 文件并切换到它。单击 x 即可返回命令行程序(除非您切换到其他应用程序)
在默认程序中启动该文件的命令称为start
C:\>start filename.xml
结论
我个人认为启动是首选模式,因为默认的 xml 查看器会有语法高亮显示,而命令窗口没有,但如果 xml 文件很小,并且您想快速查找文本、复制它并在新命令中使用它,那么 type 命令将是首选。