我正在寻找一种从XML节点的值中删除前导和尾随空格的方法。给出以下基本示例:
<CAR>
<MAKE> Ford </MAKE>
<COLOR> Yellow </COLOR>
<!--<YEAR> 1987 </YEAR>-->
</CAR>
我需要获得以下输出:
<CAR>
<MAKE>Ford</MAKE>
<COLOR>Yellow</COLOR>
<!--<YEAR> 1987 </YEAR>-->
</CAR>
我设法通过连续应用以下两个正则表达式来完成所有这些:
>\s*[^a-zA-Z0-9^<]*
[^a-zA-Z0-9^>]*\s*</
由于我对正则表达式的了解非常有限,这就是我能想到的。问题是,只要文件包含注释,我就会得到一个损坏的XML文档。
那么,任何人都可以帮助我获得一个表达式,该表达式可以成功地从值中删除前导空格和尾随空格,同时保留任何注释完整吗?
我希望,我明白了。 提前谢谢!
答案 0 :(得分:0)
我认为这里不需要正则表达式,而且,在任何情况下,您都需要循环遍历xml节点,那么为什么不简单地循环遍历节点值并对它们执行.Trim()
?
例如:
var xml = XDocument.Load("D:/myXml.xml");
foreach (var node in xml.Root.Elements())
{
foreach (var child in node.Elements())
{
Console.WriteLine(string.Format("[{0}]", child.Value.Trim()));
}
}
我的示例xml文件:
输出:(我用[]包围它,所以你可以看到空格已经消失了)
答案 1 :(得分:0)
试试这个
harvest/jobs/[jobid]/[detailid]
答案 2 :(得分:0)
如果您不介意不使用正则表达式,那么这可行:
var doc = XDocument.Parse(@"<CAR>
<MAKE> Ford </MAKE>
<COLOR> Yellow </COLOR>
<!--<YEAR> 1987 </YEAR>-->
</CAR>");
foreach (var xe in doc.DescendantNodes()
.Where(n => n.NodeType == XmlNodeType.Text)
.Select(x => x.Parent)
.ToArray())
{
xe.Value = xe.Value.Trim();
}
它会更新doc
并告诉我:
<CAR>
<MAKE>Ford</MAKE>
<COLOR>Yellow</COLOR>
<!--<YEAR> 1987 </YEAR>-->
</CAR>