我想从除root标签之外的所有xml元素中删除此xmlns =“http://www.AB.com/BC/QualityDeviationCase/1_0”。使用C#的xml元素。我已经编写了下面的代码来获取xml表单。但无法从xml元素中删除xmlns标记。
<?xml version="1.0" encoding="utf-16"?>
<QualityDeviationCaseType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CaseID xmlns="http://www.AB.com/BC/QualityDeviationCase/1_0">2</CaseID>
<Description xmlns="http://www.AB.com/BC/QualityDeviationCase/1_0">Air filter is not present</Description>
<StartDate xmlns="http://www.AB.com/BC/QualityDeviationCase/1_0">0001-01-01T00:00:00</StartDate>
<LastUpdated xmlns="http://www.AB.com/BC/QualityDeviationCase/1_0">0001-01-01T00:00:00</LastUpdated>
</QualityDeviationCaseType>
删除xmlns =“http://www.AB.com/BC/QualityDeviationCase/1_0”此标记后,我的结果应如下所示返回 -
<?xml version="1.0" encoding="utf-16"?>
<QualityDeviationCaseType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CaseID>2</CaseID>
<Description>Air filter is not present</Description>
<StartDate>0001-01-01T00:00:00</StartDate>
<LastUpdated>0001-01-01T00:00:00</LastUpdated>
</QualityDeviationCaseType>
我的C#代码,我从我的XSD文件中获取xml结果。
connection.Open();
adapter = new SqlDataAdapter(sql, connection);
adapter.Fill(dt);
myTestTable = dt.Clone();
DataRow[] orderRows = dt.Select();
XmlDocument xmlDoc = new XmlDocument();
QualityDeviationCaseType oQualityDeviationCaseType = new QualityDeviationCaseType();
foreach (DataRow row in orderRows)
{
oQualityDeviationCaseType = new QualityDeviationCaseType();
oQualityDeviationCaseType.CaseID = row[0].ToString();
oQualityDeviationCaseType.Description = row[3].ToString();
}
using (StringWriter stringwriter = new System.IO.StringWriter())
{
XmlSerializer ser = new XmlSerializer(typeof(QualityDeviationCaseType));
ser.Serialize(stringwriter, oQualityDeviationCaseType);
sampleChannel.Publish(stringwriter.ToString());
//This line of code sending my xml file to IBM WMQ.
}
根据我上面的代码,我的结果是每个lement的xml标签。我想使用c#。
从元素标记中删除答案 0 :(得分:0)
xmlns
属性在XML中具有重要的语义:它将所有元素放在默认命名空间http://www.AB.com/BC/QualityDeviationCase/1_0
中。
我并不熟悉C#,但是:删除它意味着在语义层面而不是句法层面进行推理。
具体而言,应该通过删除正在导出的XML文档中的所有元素的名称空间来完成,或者首先不将它们放在任何名称空间中。如果C#库已经完成,它应该提供一种方法。
答案 1 :(得分:0)
你试过Regex吗?
using System.Text.RegularExpressions;
...
string pattern = @"xmlns=""[a-zA-Z0-9:\/._]{1,}""";
using (StringWriter stringwriter = new System.IO.StringWriter())
{
XmlSerializer ser = new XmlSerializer(typeof(QualityDeviationCaseType));
ser.Serialize(stringwriter, oQualityDeviationCaseType);
string s = stringwriter.ToString();
Match m = Regex.Match(s,pattern);
if(m.Success)
s=s.Replace(m.Value, "");
sampleChannel.Publish(s);
//This line of code sending my xml file to IBM WMQ.
}
我对XmlSerializer并不熟悉,但我认为这应该可行。匹配只会找到以'xmlns =“'开头并以'”'结尾的任何内容。