xml解析面临的问题。无法替换字符串

时间:2013-03-27 09:24:21

标签: xml xml-parsing

我有一个xml如下: -

<Comments>
    <Comment Text="ABC">
        <Note Timestamp="3/25/2013 8:26AM" Text="Movie">
    </Note>
</Comments>

我想在同一行结束评论标签,如

<Comment Text="ABC"/>

我已将字符串替换所有操作应用为: -

str.replaceAll("><Note", "/><Note");

但由于注释和Notes标记之间存在无限空格,因此无法正常工作。 请注意,每次都会有不同的空间。 请建议我如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

以下是您的解决方案,

in = in.replaceAll(">[\\s]*<Note", "/><Note");

答案 1 :(得分:0)

您可以使用Linq通过将每个Note - 节点替换为新节点来执行此操作。简化示例仅处理第一个节点(在Linqpad中测试):

 XElement oldStructure = 
     XElement.Parse(@"<Comment Text=""ABC"">
                       <Note Timestamp=""3/25/2013 8:26AM!"" Text=""Movie"">
                       </Note></Comment>");

 oldStructure.Dump("Original"); 

 // Replace this with some kind of lookup for each Note-element:
 var noteNode = (XElement) oldStructure.FirstNode; 

 // Create a new node. Note that it has no content:
 // (The null could be left out - left it here just to be explicit)
 var simplifiedNote = new XElement(noteNode.Name, null);
 noteNode.Attributes().ToList().ForEach(
    attrib => simplifiedNote.Add(new XAttribute(attrib.Name, attrib.Value)));

 // Replace with newly generated node - Linq will automatically use 
 // the compact format for you here, since the node has no content. 
 oldStructure.FirstNode.ReplaceWith(simplifiedNote);

 oldStructure.Dump("Final");

在Linqpad中运行它将首先转储以下内容:

原件:

<Comment Text="ABC">
   <Note Timestamp="3/25/2013 8:26AM!" Text="Movie"></Note>
</Comment>

决赛:

<Comment Text="ABC">
   <Note Timestamp="3/25/2013 8:26AM!" Text="Movie" />
</Comment>