簡體   English   中英

XmlDocument.SelectSingleNode並不總是正常工作

[英]XmlDocument.SelectSingleNode not always working accurately

我在使用C#時遇到一個有趣的問題,並始終選擇xml節點。

我們的網站正在從經典的ASP升級到ASP.NET。 為了使升級過程中的訪問者更加順暢,我實施了404重定向,將訪問者帶到新的.aspx,以替換外部鏈接,書簽等情況下的舊.asp頁。

有些鏈接只是從.asp更改為.aspx,但有些鏈接的結構和命名也有所更改,因此我有一個遵循以下模式的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<links>
    <link oldUrl="/jailpod/default.asp" newUrl="/about/construction/jailpod.aspx" />
    <link oldURL="/boc/boards.asp" newUrl="/boc/boards/default.aspx" />
    <link oldUrl="/maps.asp" newUrl="/maps/default.aspx" />
</links>

我們的自定義404頁在后面的C#代碼中使用此XML文件。 代碼通過查找XML文件中的新URL來查找替換URL的過程,查看該頁面是否只是更改為.aspx,最后是否沒有找到匹配項停留在404頁面上以告知訪問者他們的頁面不正確。

這是C#代碼:

    // Whether or not to display an additional message to the users
    bool redirectVisitor = false;

    string url = ExtractUrlFrom(Request.Url.ToString());

    var doc = new XmlDocument();
    doc.PreserveWhitespace = true;
    doc.Load(Server.MapPath("~/inc/NewUrlDictionary.xml"));

    XmlNode urlNode = doc.SelectSingleNode(
        string.Format("/links/link[@oldUrl='{0}']", url));

            // Check if the node existed or not
            if (urlNode != null)
            {
                url = urlNode.Attributes["newUrl"].Value;
                redirectVisitor = true;
            }
            else
            {
               ....
            }
        }

這是問題。

當我訪問時:

mysite / jailpod / default.asp

要么

mysite / maps.asp

正如我所期望的那樣,我被重定向了。

當我訪問時:

mysite / boc / boards.asp

找不到XmlNode,因此404頁僅告訴我它不存在。 我已經使用斷點逐步執行了C#代碼,並且它正在搜索的URL恰好是“ /boc/boards.asp”,甚至使用Visual Studio Locals面板瀏覽XmlDocument對象的內容,並且它確實確實有一個屬性為“ /boc/boards.asp”的節點

對於一個節點而言,這不是一個孤立的問題,在其他節點中(似乎是隨機的)它也發生了。

有人知道我在做什么錯嗎? 我正在考慮只是將所有這些XML記錄遷移到我們的數據庫中,而是查詢該數據庫-除非我在這里的某個地方犯了一個愚蠢的錯誤。

Xml屬性區分大小寫。 您的第二個xml元素中有oldURL而不是oldUrl。

看一下您的源XML文檔,您遇到問題的那個的oldUrl屬性的大小寫與其他條目的情況不同。 xpath區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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