Linq2Xml删除特定属性名称及其值

时间:2016-02-09 12:03:38

标签: c# asp.net regex xml

我有这个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

3 个答案:

答案 0 :(得分:2)

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

例如,在xsh中,您可以使用

实现此目的
open file.xml ;
rm //@Name ;
save :b ;

答案 1 :(得分:2)

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

0

所以从这个:

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>

该代码段将删除除根目录之外的XML中的每个元素的所有名称属性。如果你想做其他事情(比如清空属性或包含根元素),请告诉我。

答案 2 :(得分:1)

试试这个RegEx:

Name=\"(.*?)\"

enter image description here