我有一个xml如下: -
<Comments>
<Comment Text="ABC">
<Note Timestamp="3/25/2013 8:26AM" Text="Movie">
</Note>
</Comments>
我想在同一行结束评论标签,如
<Comment Text="ABC"/>
我已将字符串替换所有操作应用为: -
str.replaceAll("><Note", "/><Note");
但由于注释和Notes标记之间存在无限空格,因此无法正常工作。 请注意,每次都会有不同的空间。 请建议我如何实现这一目标。
答案 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>