【发布时间】:2012-06-03 22:00:09
【问题描述】:
我有一个生成序列化 xml 的第三方组件和解析 xml 并将值插入表的存储过程。
我在组件和 sql 存储过程中处理 xsi nil 时遇到问题。我无法控制更改组件或存储过程。所以属性解决方案上的 IsNullable 属性而不是过程解决方案上的 xsi=true 对我没有帮助。
我正在尝试使用正则表达式来处理这个问题。
.*xsi\:nil\=\"true\" \/\>
上面的正则表达式匹配非常适合下面的输入
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<prop1>
<prop11>abc</prop11>
<prop12 xsi:nil="true" />
<prop13>def</prop13>
</prop1>
</Root>
但不适用于此输入
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><prop1><prop11>abc</prop11><prop12 xsi:nil="true" /><prop13>def</prop13></prop1></Root>
想要的输出是
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<prop1>
<prop11>abc</prop11>
<prop13>def</prop13>
</prop1>
</Root>
更新: 属性名称和级别仅在运行时已知。请参考下面的不同xml
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<pa>
<paa>abc</paa>
<pab xsi:nil="true" />
<pac>def</pac>
<pad>
<pada>val1</pada>
<padb xsi:nil="true" />
<padc>
<padca>vala</padca>
<padcb xsi:nil="true" />
</padc>
<pad>
</prop1>
</Root>
上述 xml 的期望输出是
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<pa>
<paa>abc</paa>
<pac>def</pac>
<pad>
<pada>val1</pada>
<padc>
<padca>vala</padca>
</padc>
<pad>
</prop1>
</Root>
谁能帮帮我
谢谢,
埃森
【问题讨论】:
-
您要替换值吗?用什么? IE,想要的结果是什么?
-
用空字符串替换它
-
调整我的答案给你想要的结果。