簡體   English   中英

從xml節點中刪除名稱空間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM