【发布时间】:2018-06-05 12:50:12
【问题描述】:
所以,我正在编写一个脚本来执行一些简单的 xmlrpc 请求。据我所知,Powershell 没有内置任何东西,所以我发现的最好和最简单的解决方案是简单地创建 xml 并使用 invoke-webrequest 或 invoke-restmethod 发布它。
如果有人知道开箱即用功能的更好方法,请随时教育我。
现在,这是我遇到问题的部分。生成xml。我希望它如何工作: 创建一个自定义对象,添加属性,转换为 xml 并发布。更好的是创建一个 xml 对象,添加节点和属性,然后发布它。
不过,这似乎有点像 PITA,在这一点上,我觉得在 Powershell 中将 xml 视为字符串并以这种方式编辑/管理它会更容易。那么,我是否遗漏了什么,或者在 Powershell 中使用 xml 不像我希望的那么容易?
编辑:为了澄清,我要求在 Powershell 中创建自定义 xml 的最佳工具/技术。到目前为止,我的印象是最好的方法是简单地将其构建为字符串,因为使用内置的 xml 工具既麻烦又混乱。但是我意识到这对于更大或更复杂的 XML 结构是不可行的。
到目前为止,我所拥有的东西不起作用,也没有我想要的那么漂亮。 这段代码给了我以下错误
方法调用失败,因为 [System.String] 不包含名为“Appendchild”的方法。
$xmlreq = [xml]@'
<?xml version="1.0"?>
<methodCall>
<methodName>methodname</methodName>
</methodCall>
'@
$child = $xmlreq.CreateElement("params")
$xmlreq.methodCall.Appendchild($child)
$child = $xmlreq.CreateElement("param")
$xmlreq.methodCall.params.Appendchild($child)
$child = $xmlreq.CreateElement("value")
$xmlreq.methodCall.params.param.Appendchild($child)
$child = $xmlreq.CreateElement("string")
$xmlreq.methodCall.params.param.value.Appendchild($child)
$xmlreq.methodCall.params.param.value.string = "value"
生成的 XML 应该是什么样子:
<?xml version="1.0"?>
<methodCall>
<methodName>methodname</methodName>
<params>
<param>
<value>
<string>param1</string>
</value>
</param>
<param>
<value>
<string>param2</string>
</value>
</param>
<param>
<value>
<string>param3</string>
</value>
</param>
<param>
<value>
<string>param4</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>property1</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>property2</name>
<value>
<string>value</string>
</value>
</member>
<member>
<name>property3</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>property4</name>
<value>
<string>value</string>
</value>
</member>
<member>
<name>property5</name>
<value>
<int>2</int>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
【问题讨论】:
-
您的问题到底是什么?有错误吗? XML 不是按照你喜欢的方式出来的吗?
-
您尝试过什么,您尝试过什么失败了?理想情况下,您应该提供一个minimal reproducible example 来说明您的尝试,并包含有关它如何失败的具体信息,以及错误消息和/或错误输出。 Stack Overflow 不是代码编写服务;最好的问题是那些提供有用信息的问题,以便回答的人可以指导您设计自己的正确答案。请参阅How to Ask 一个好问题。
-
此外,还有用于 Powershell(例如 github.com/mosserlee/PSClient-for-XML-RPC)和 .NET 的 XMLRPC 实现,您可以将它们集成到您的脚本中。尝试使用已经存在的东西,而不是滚动你自己的实现。
-
对不起,我会尽量澄清:我现在的主要问题是在 powershell 中创建和编辑 xml 文件的最佳方法是什么?不使用现有 XML-RPC 实现的原因有两个,首先,我将其用作学习的练习,其次,我更喜欢我的解决方案小型、可移植且不依赖于操作中未包含的组件系统。
-
因此,在查看了您发布的项目中的代码后,我发现他们确实将 xml 视为字符串,而不是使用 Powershell 内置的 XML 解析。这让我相信,至少我不是唯一一个发现 Powershell 与 XML 交互的方式有点欠缺的人。
标签: xml powershell xml-rpc