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