【发布时间】:2017-03-17 03:21:28
【问题描述】:
我正在尝试使用 Powershell 中的子节点属性修改父节点属性。做这个的最好方式是什么?任何指针都非常感谢。下面是代码。文件名是 pricefile.xml
<model type="model1" name="default" price="12.12" date="some_value">
<PriceData>
<item name="watch" price="24.28" date="2013-12-01"/>
<item name="toy" price="22.34" date="2013-12-02"/>
<item name="bread" price="24.12" date="2013-12-03"/>
</PriceData>
</model>
我想使用项目名称过滤上述 xml 文件。比如我需要item watch的详细信息,应该可以在powershell中解析上面的xml,得到如下内容。
<model type="model1" name="watch" price="24.28" date="2013-12-01">
<PriceData>
<item name="watch" />
</PriceData>
</model>
注意子节点的属性是如何被删除的,模型属性是如何用监视属性重置的。你能告诉我最好的方法吗?
如果我使用以下任何命令,我不会得到任何输出。
[xml]$item = get-content pricefile.xml
$item.SelectNodes("//item/@*").parentnode
$item.SelectNodes("//item/@*") | where {$_.parentnode}
【问题讨论】:
-
最好的方法就是简单地这样做。目前,这个问题似乎是一个“为我做”的请求。你自己尝试过吗?问题是什么?您可以将您尝试过的代码添加到问题中吗?
-
更新了我所做的。我尝试了很多次,但没有产生任何结果,因此没有添加它们,因为我想知道是否有更好的方法,不想误导他人,或者需要更新鲜的视角,感谢您提供真正的帮助 wOxxOm您的评论确实对阅读此问题的每个人都有帮助。
-
无需讽刺,您会惊讶于 StackOverflow 上无知用户的“给我代码”请求的数量。这样的问题对任何人都没有帮助。
-
对于任务,
$xml.SelectNodes('//item[@name="watch"]')选择item节点,然后你可以像你一样使用.parentNode。 -
这是一个非常常见的问题,更多的是关于使用 powershell 遍历 xml 树,而不是给我我的确切代码。顺便说一句,我也花了几个小时寻找一个没有结果的类似问题,他们中的大多数人已经解决了这个问题,用于 XLST 或 C# 等。请在制作通用 cmets 之前检查你的事实。不过,感谢您的解决方案,我试图不对属性=值对进行真正的硬编码,我想获得一种仅基于属性名称、任何属性名称来查找父级的通用方法,也许我应该更新我的问题。跨度>
标签: xml powershell attributes nodes parent-node