在.NET中解析XML的正则表达式

6
我有以下函数,用于从xmlString中删除字符\04和nulls,但我找不到需要更改的内容,以避免删除我的结束标记中的\。当我运行这个函数时,我得到了以下结果。
<ARR>20080625<ARR><DEP>20110606<DEP><PCIID>626783<PCIID><NOPAX>1<NOPAX><TG><TG><HASPREV>FALSE<HASPREV><HASSUCC>FALSE<HASSUCC>

有人能帮我找出需要在我的表达式中做哪些更改,才能保留结束标签为</tag>吗?

Private Function CleanInput(ByVal inputXML As String) As String
    ' Note - This will perform better if you compile the Regex and use a reference to it.
    ' That assumes it will still be memory-resident the next time it is invoked.
    ' Replace invalid characters with empty strings.
    Return Regex.Replace(inputXML, "[^><\w\.@-]", "")
End Function

这不会从您的字符串中删除 '\0''\04' 字符,而是除了一些字符(<>、空格、.@-)之外的所有内容都会被删除。另外,您提到的输出对应的输入是什么? - Thomas
你能否发一两行这个函数输入的样例? - Matt Blaine
@Thomas,\w代表的是单词字符,而不是空格。 - Joel
1
哎呀!这再次证明了正则表达式是用来写的,而不是读的 ;) - Thomas
+1 如果你能举出一种使用正则表达式和 XML 结合的案例,而不是 WTF。;) - TrueWill
1个回答

4
Private Function CleanInput(ByVal inputXML As String) As String
    Return Regex.Replace(inputXML, "[^/><\w\.@-]", "")
    ' --------------------------------^
End Function

但是,由于您的目标仅是删除\04\00,因此更安全的做法是仅限于对它们进行替换。

Private Function CleanInput(ByVal inputXML As String) As String
    Return Regex.Replace(inputXML, "[\4\0]", "")
End Function

非常感谢大家的帮助,现在我已经得到了一个干净的XML。 - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接