【问题标题】:Linq2Xml Remove specific attribute name and their valuesLinq2Xml 删除特定属性名称及其值
【发布时间】:2016-05-19 09:53:34
【问题描述】:

我有这个 XML,我正在尝试删除这些: Name="items" Name="shipmentsShipmentIndex"

“名称”不会改变,

要改变的词是引号之间的词,在这个例子中: itemsshipmentsShipmentIndex

<?xml version="1.0" encoding="UTF-8"?>

 <RootDTO xmlns:json='http://james.newtonking.com/projects/json'>
   <destination>
      <name>XXX</name>
   </destination>
   <orderData>    
      <items json:Array='true'>   
        <shipmentIndex Name="items">0</shipmentIndex>           
      </items>
       <items json:Array='true'>      
        <shipmentIndex Name="items">0</shipmentIndex>           
      </items>

      <shipments json:Array='true'>          
        <shipmentIndex Name="shipmentsShipmentIndex">0</shipmentIndex>                                                          
      </shipments>
   </orderData>
  </RootDTO>

我怎样才能找到所有这些事件并删除它们(或什么都不替换)? 我尝试了一堆变体,例如:Name{1}[a-zA-Z]+"\b

【问题讨论】:

  • 尝试基本替换:\bName="[^"]*" => Name="NEW_VALUE"
  • 据我所见,它的“A word边界”
  • @WiktorStribiżew 不理解您的解决方案-“尝试基本替换”
  • 看下面的答案,我想这就是你所需要的。

标签: c# asp.net regex xml


【解决方案1】:

你写的这是 ASP.NET。您可以使用 Linq2Xml 非常快速地执行此操作(LinqPad 示例):

void Main()
{
    var test = XDocument.Parse("<root><node name=\"name value\">Text</node></root>");
    foreach(var attr in test.Descendants().SelectMany(el=>el.Attributes("name")))
                attr.Remove();

    test.Dump();
}

所以从这里开始:

<root>
  <node name="name value">Text</node>
</root>

你明白了:

<root>
  <node>Text</node>
</root>

sn-p 将从 XML 中除根元素之外的每个元素中删除所有名称属性。如果您想做其他事情(例如清空属性或包含根元素),请告诉我。

【讨论】:

  • 我选择了你的答案,因为它与我的项目(asp.net)更相关,谢谢
  • @EranMeir:下次请不要忘记正确标记您的问题。
【解决方案2】:

试试这个正则表达式:

Name=\"(.*?)\"

【讨论】:

  • 你能用this tool或其他工具分享它吗(显示示例?我无法让它工作
  • @EranMeir 您添加的链接仅适用于 Javascript 正则表达式。试试这个链接 - myregextester.com。我无法在此网址中保存测试。
  • 您可以使用Regexstorm.net 共享指向.NET 正则表达式的链接
  • @WiktorStribiżew 谢谢,我已经测试过了,但无法保存。
  • 我得到“找到 0 个匹配项”
【解决方案3】:

Don't parse XML with regular expressions。使用 XML 感知工具。

例如,在xsh,您可以使用

open file.xml ;
rm //@Name ;
save :b ;

【讨论】:

  • @WiktorStribiżew:我只是一个维护者。
  • 我无法向该项目添加库
  • 如何在 asp.net 项目中使用它?
  • @EranMeir:你没有说这是一个 asp.net 项目。但是请参阅stackoverflow.com/questions/7209834/… 了解如何使用任何东西。
  • 如我所说。我不能向这个项目添加任何库或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2021-12-28
  • 1970-01-01
  • 2012-05-06
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多