我正在尝试解析xml,但在解析它之前,我正在使用.NET的Regex.Replace方法从中清除一些不必要的属性。
这是我的输入
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:loginResponse>
<loginReturn xsi:type="xsd:string">asdsadsadasdas2321312dasdasdas21asdas</loginReturn>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
这是我为正则表达式编写的
xmlns:[a-zA-Z\d-=":\/\.]+
这是输出
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:loginResponse>
<loginReturn xsi:type="xsd:string">asdsadsadasdas2321312dasdasdas21asdas</loginReturn>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Found 5 matches:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:Magento"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
String literals for use in programs:
C#
@"xmlns:[a-zA-Z\d-="":\/\.]+"
这是想要的输出
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<ns1:loginResponse>
<loginReturn>asdsadsadasdas2321312dasdasdas21asdas</loginReturn>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我尝试了类似
的内容xmlns?xsi?[a-zA-Z\d-=":\/\.]+
但它不起作用。它似乎也无法解决以SOAP-ENV开头的属性。
感谢。
答案 0 :(得分:1)
尝试将字符串输入转换为XmlElement,然后使用XmlElement.RemoveAttribute方法删除“encodingStyle”属性。
答案 1 :(得分:1)
试试这个正则表达式..这可能会得到你想要的输出。
(xmlns:| SOAP-|xsi:)[\w-=":\/\.]+
问号使前一个语句可选,在你的情况下只使's'和'i'可选
xmln s ?xs 我?[a-zA-Z \ d - =“:/。] +
如果您打算让xmln
和xsi
代码可选,那么您的正则表达式应该如下所示
(xmlns)?(xsi)?[a-zA-Z\d-=":\/\.]+
由于正则表达式将捕获[a-zA-Z\d-=":\/\.]+
部分中的everthing,因此会抓住很多
答案 2 :(得分:0)
问号在正则表达式中具有特殊含义。如果你想在你的搜索中实际使用它们,请尝试转义问号
xmlns\?xsi\?[a-zA-Z\d-=":\/\.]+