Avatar billede flashit Nybegynder
14. maj 2009 - 21:00 Der er 6 kommentarer og
1 løsning

Xpath i c#

Hej e.

Jeg har denne xml stump.
Hvordan kan jeg få fat i værdien "http://ServerNavn/" og udskifte den med "MinNyeServer"

"http://ServerNavn/" er indholdet at MatchingString under Rules

<SearchScopes>
    <SearchScope Name="SearchScope" Description="" DisplayInAdminUI="true">
      <Rules RuleType="2" FilterBehavior="0" PropertyName="ContentSource" PropertyValue="QmitContentSource" UrlRuleType="0" />
      <Rules RuleType="2" FilterBehavior="2" PropertyName="ContentSource" PropertyValue="Local Office SharePoint Server sites" UrlRuleType="0" />
      <Rules RuleType="1" FilterBehavior="1" MatchingString="http://ServerNavn/ " UrlRuleType="0" />
    </SearchScope>
  </SearchScopes>

Er her en som kan hjælpe.
Avatar billede arne_v Ekspert
14. maj 2009 - 21:14 #1
Demo:

using System;
using System.Xml;

namespace E
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string xml = @"<SearchScopes>
    <SearchScope Name=""SearchScope"" Description="""" DisplayInAdminUI=""true"">
      <Rules RuleType=""2"" FilterBehavior=""0"" PropertyName=""ContentSource"" PropertyValue=""QmitContentSource"" UrlRuleType=""0"" />
      <Rules RuleType=""2"" FilterBehavior=""2"" PropertyName=""ContentSource"" PropertyValue=""Local Office SharePoint Server sites"" UrlRuleType=""0"" />
      <Rules RuleType=""1"" FilterBehavior=""1"" MatchingString=""http://ServerNavn/"" UrlRuleType=""0"" />
    </SearchScope>
  </SearchScopes>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            doc.Save(Console.Out);
            doc.SelectSingleNode("//SearchScopes/SearchScope/Rules[@MatchingString='http://ServerNavn/']/@MatchingString").Value = "http://MinNyeServer/";
            doc.Save(Console.Out);
            Console.ReadKey();
        }
    }
}
Avatar billede sirius Nybegynder
14. maj 2009 - 21:16 #2
Nu skriver du godt nok XPath, men hvis du har mulighed for at bruge LINQ kan du gøre følgende:

var doc = XDocument.Parse("<SearchScopes> <SearchScope Name=\"SearchScope\" Description=\"\" DisplayInAdminUI=\"true\">      <Rules RuleType=\"2\" FilterBehavior=\"0\" PropertyName=\"ContentSource\" PropertyValue=\"QmitContentSource\" UrlRuleType=\"0\" />      <Rules RuleType=\"2\" FilterBehavior=\"2\" PropertyName=\"ContentSource\" PropertyValue=\"Local Office SharePoint Server sites\" UrlRuleType=\"0\" />      <Rules RuleType=\"1\" FilterBehavior=\"1\" MatchingString=\"http://ServerNavn/\" UrlRuleType=\"0\" />    </SearchScope>  </SearchScopes>");

var rules = from e in doc.Descendants("Rules")
            where e.Attribute("MatchingString") != null &&
                  e.Attribute("MatchingString").Value == "http://ServerNavn/"
            select e;
foreach (var rule in rules)
{
    rule.Attribute("MatchingString").Value = "MinNyeServer";
}
Avatar billede flashit Nybegynder
14. maj 2009 - 21:30 #3
Hej Arne

Der virker perfekt. Tak.
Kan du ikke lige forklare den anden @MatchingString i din Xpath, den havde jeg nemlig ikke lige set komme.

@MatchingString='http://ServerNavn/']/@MatchingString"

Jeg læser det som:
Find attributten under noderne
SearchScopes/SearchScope/Rules
hvor navnet = MatchingString
og værdien er = http://ServerNavn/

men den anden??
Avatar billede flashit Nybegynder
14. maj 2009 - 21:31 #4
Sirius
Jeg har desværre ikke mulighed for at benytte link. Ellers tak :-)
Avatar billede arne_v Ekspert
14. maj 2009 - 21:46 #5
"//SearchScopes/SearchScope/Rules[@MatchingString='http://ServerNavn/']/@MatchingString"

er:

element SearchScopes
element SearchScope
element Rules med en attribut MatchingString med vaerdien 'http://ServerNavn/'
attribut MatchingString

Det foerste er en betingelse paa elementet. Det andet er for at "gaa ned" i attributten.

Det er muligt at du vil vil soege paa en anden maade, men det var lige hvad der faldt mig ind.
Avatar billede flashit Nybegynder
14. maj 2009 - 21:50 #6
Super, det var bare for at forstå :-)
Lægger du et svar.

Takker mange gange. :-)
Avatar billede arne_v Ekspert
14. maj 2009 - 22:03 #7
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester