如何在 C# 中修剪 XML 字符串中除 XML 命名空间标头之外的空格?

编程


我想修剪 xml 字符串中的空格,不包括 c# 中的 xml 命名空间标头。 我的 xml 字符串如下。 我想单独修剪 xml 节点值,不包括命名空间标头 (getInstallmentHistoryReply xmlns:NS1=”urn:esbbank.com/gbo/xml/schemas/v1_0/”)

XML
<getInstallmentHistoryReply xmlns:NS1="urn:esbbank.com/gbo/xml/schemas/v1_0/">
	<eAI_HEADER>
		<serviceName>GET.FINANCE.DETAIL</serviceName>
		<serviceType>SYNC</serviceType>
		<serviceVersion>1.0</serviceVersion>
		<client>ADIB</client>
		<clientChannel>DDS</clientChannel>
		<msgChannel>HTTP</msgChannel>
		<requestorLanguage>E</requestorLanguage>
		<securityInfo>
			<authentication>
				<UserId>DDS</UserId>
				<Password>XXXXXXXXXX</Password>
			</authentication>
		</securityInfo>
		<returnCode>0000</returnCode>
	</eAI_HEADER>
</getInstallmentHistoryReply>

我尝试过的:

我的代码如下

string ResponseXML_Updated = ResponseXML.Replace("NS1:getInstallmentHistoryReply", "getInstallmentHistoryReply");
            
            string ResponseXML_Trimmed = System.Text.RegularExpressions.Regex.Replace(ResponseXML_Updated, @"(([^\s]+)\s+)", "$2"); 
           
            
            System.Xml.XmlDocument xd1 = new System.Xml.XmlDocument();
            xd1.LoadXml(ResponseXML_Trimmed);

解决方案1

有两件事 – 首先,您需要删除 <pre> 从您的 xml 中删除,否则在您开始“修剪”它之前它不会被处理。

其次,您不能盲目地删除所有空格:如果您查看生成的字符串:

XML
<getInstallmentHistoryReplyxmlns:NS1="urn:esbbank.com/gbo/xml/schemas/v1_0/"><eAI_HEADER><serviceName>GET.FINANCE.DETAIL</serviceName>...

您可以看到它不是有效的 XML:它需要在 getInstallmentHistoryReply 标签和 xmlns: 属性或整体看起来像一个较长的属性名称,前面没有适当的标签。
我建议您更改正则表达式以仅删除后面的空格 > 标签结束标记

コメント

タイトルとURLをコピーしました