【问题标题】:XML Parent node modification using childnode attribute in Powershell在 Powershell 中使用 childnode 属性修改 XML 父节点
【发布时间】: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


【解决方案1】:

在解析/遍历 xml 文档的类似问题中提供了一个非常优雅的解决方案。 它也适用于在这个问题中遍历树。 以下是另一个问题的链接:

Modify XML Parent Attributes iterating through Child attributes using powershell

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2019-12-18
    • 2023-03-14
    相关资源
    最近更新 更多