[英]How to Select XML Nodes with XML Namespaces from an XmlDocument?
[英]Remove namespaces from xml nodes
我已經編寫了一個程序來從excel創建xml文檔,但是它正在輸出以下格式(請注意,鍵和值節點上的xmls =“”(我不希望這樣做))
<?xml version="1.0" encoding="utf-8"?>
<Content xmlns="uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1">
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key xmlns="">/*$0*/</key>
<value xmlns="">/</value>
</Redirect>
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key xmlns="">/2014-12-22</key>
<value xmlns="">/</value>
</Redirect>
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key xmlns="">/a</key>
<value xmlns="">/</value>
</Redirect>
</Content>
所需的格式請注意,鍵和值節點沒有xmlns =“”
<Content xmlns="uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1">
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key>/*$0*/</key>
<value>/</value>
</Redirect>
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key>/2014-12-22</key>
<value>/</value>
</Redirect>
<Redirect xmlns="xmlns:xlink=http://www.w3.org/1999/xlink">
<key>/a</key>
<value>/</value>
</Redirect>
</Content>
我的代碼
private void btnUpload_Click(object sender, EventArgs e)
{
if (lblFileUploaded.Text != "No_File_has_been_uploaded")
{
if (ddlHostName.SelectedIndex == -1)
{
MessageBox.Show("please_select_a_host_name");
}
else
{
var hostName = ddlHostName.SelectedItem.ToString();
//"Content" + "xmlns=\"uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1\""
XNamespace ns = "uuid:5c2dffe6-cf72-4211-a8a0-dc6a7baf3ff1";
var rootNode = new XElement(ns + "Content");
var processedUrls = new HashSet<string>();
//select the file thats been uploaded
var file = new FileInfo(openFileDialog1.FileName);
if (!file.Exists)
{
return;
}
if (file.Extension != ".xlsx")
{
lblFileUploaded.Text = "ERROR__File_format_invalid";
return;
}
using (var package = new ExcelPackage(file))
{
var workbook = package.Workbook;
var sheet = workbook.Worksheets[1];
int lastRow = sheet.Dimension.End.Row;
//loop through the xsls rows of data
for (int i = 2; i < lastRow; i++)
{
var oldUrl = sheet.Cells[i, 1].Text.Trim();
var newUrl = sheet.Cells[i, 2].Text.Trim();
if (string.IsNullOrWhiteSpace(oldUrl) || string.IsNullOrWhiteSpace(newUrl) || processedUrls.Contains(oldUrl))
continue;
processedUrls.Add(oldUrl);
XNamespace ns2 = "xmlns:xlink=" + "http://www.w3.org/1999/xlink";
var urlChildNode = new XElement( ns2 + "Redirect");
rootNode.Add(urlChildNode);
var urlOldNode = new XElement("key", oldUrl.Replace(hostName, ""));
urlChildNode.Add(urlOldNode);
if (newUrl.Equals(hostName + "/"))
{
var urlNewNode = new XElement("value", newUrl.Replace(hostName + "/", "/"));
urlChildNode.Add(urlNewNode);
}
else if (newUrl.Equals(hostName))
{
var urlNewNode = new XElement("value", newUrl.Replace(hostName, "/"));
urlChildNode.Add(urlNewNode);
}
else if (newUrl.Equals("www.aircharterservice.com"))
{
var urlNewNode = new XElement("value", newUrl.Replace("www.aircharterservice.com", "/"));
urlChildNode.Add(urlNewNode);
}
else
{
var urlNewNode = new XElement("value", newUrl.Replace(hostName, ""));
urlChildNode.Add(urlNewNode);
}
}
}
目前,我正在努力查看如何刪除不需要的名稱空間
感謝上面的幫助,以下代碼幫助我解決了問題。
XNamespace ns2 = "xmlns:xlink=" + "http://www.w3.org/1999/xlink";
var urlChildNode = new XElement( ns2 + "Redirect");
rootNode.Add(urlChildNode);
var urlOldNode = new XElement(ns2 + "key", oldUrl.Replace(hostName, ""));
urlChildNode.Add(urlOldNode);
if (newUrl.Equals(hostName + "/"))
{
var urlNewNode = new XElement(ns2 + "value", newUrl.Replace(hostName + "/", "/"));
urlChildNode.Add(urlNewNode);
}
else if (newUrl.Equals(hostName))
{
var urlNewNode = new XElement(ns2 + "value", newUrl.Replace(hostName, "/"));
urlChildNode.Add(urlNewNode);
}
else if (newUrl.Equals("www.aircharterservice.com"))
{
var urlNewNode = new XElement(ns2 + "value", newUrl.Replace("www.aircharterservice.com", "/"));
urlChildNode.Add(urlNewNode);
}
else
{
var urlNewNode = new XElement(ns2 + "value", newUrl.Replace(hostName, ""));
urlChildNode.Add(urlNewNode);
}
子元素從父元素繼承默認名稱空間。 因此,此xml代碼:
<parent xmlns="Namespace">
<child />
</parent>
相當於:
<parent xmlns="Namespace">
<child xmlns="Namespace" />
</parent>
但不能:
<parent xmlns="Namespace">
<child xmlns="" />
</parent>
因此,如果要從child
元素中刪除xmlns=""
屬性,則必須將child
元素放置在與parent
元素相同的名稱空間中,但不能放入空名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.