2012-08-29 107 views
0

在替換字符串如何寫的XPath表達式爲:xml文檔

<script src="../../Scripts/ex.js"></script> 

將匹配src值(../../Scripts/ex.js)。因爲我想用其他字符串來替代../../Scripts

+0

做什麼? – RredCat

+0

我只想選擇所有腳本標記並替換那裏的src值 –

+0

請顯示* XML *標記。 – adatapost

回答

0

我知道你說你想要一個XPath表達式,但簡單的字符串替換呢?

例如

string s = "<script src=\"../../Scripts/ex.js\"></script>"; 
string newS = s.Replace("../../Scripts", "../../Scripts2"); // Or whatever you want to replace it with 
+0

OP想從* XML *文件中替換* xxxxx *字符串。 – adatapost

+0

是的,我明白,但有問題的XML文檔看起來像一個ASP.NET(或Razor)頁面。我只是提出解決問題的不同方式! –

1

您還可以使用HtmlAgilityPack,讓您有效codeplex tool訪問屬性。

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(@"<script src="../../Scripts/ex.js"></script>" />"); 

foreach (var script in doc.DocumentNode.Descendants("script")) 
{ 

    script.Attributes["src"].Value = "loading.gif"; 
} 

另一種方法是使用LINQ到XML

2

你可以用下面的代碼去。

TextReader tr = new StringReader(response); 
    XElement xelement = XElement.Load(tr); 
    var Script = xelement.Descendants("script").ToList(); 
    if (Script.Count() > 0) 
    { 
    Script.First().Attribute("src").Value = "../../Scripts/NewEXWithReplace.js"; 

    } 
+0

你用另一個字符串's替換''src',而不是'script'的src –

+0

這種方式不會替代源文檔中的'src',結果只會是新的字符串實例,我假設OP想要替換這個'src'實際文檔不能獲取修改後的字符串。 – user854301

+0

現在你只替換第一個'script',但我認爲你只應該在src'屬性中修改腳本中擁有'../../ Scripts/ex.js'的腳本,我認爲應該對所有的事件... – user854301

1

的LINQ to XML要js文件的添加 「版本」

var xdocument = XDocument.Load("XMLFile1.xml"); // you can use Parse or whatever 
var elements = xdocument.XPathSelectElements("//script[@src='../../Scripts/ex.js']"); 
foreach (var element in elements) 
{ 
    element.Attribute("src").SetValue("foo"); 
}