2009-12-30 2 views
0

Я создал шаблонный файл xml, содержащий несколько слов типа {contentname}. Мне нужно заменить такие теги на мои значения. скажите, пожалуйста, как найти такое слово и замену с использованием filehandling в vb.net мой XML TemplateFile, как это:Скажите, пожалуйста, как найти и заменить определенное слово в файле, используя vb.net.

<!-- BEGIN: main --> 
<?xml version="1.0" encoding="UTF-8"?> 
<OTA_HotelSearchRQ xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opentravel.org/OTA/2003/05OTA_HotelSearchRQ.xsd" EchoToken="{EchoToken}" Target="{Target}" Version="1.006" PrimaryLangID="{PrimaryLangId}" MaxResponses="{MaxResponses}"> 
<POS> 
<!-- BEGIN:Source --> 
<Source> 
<RequestorID ID="{affiliateId}" MessagePassword="{MessagePassword}" /> 
</Source> 
<!-- END:Source --> 
</POS> 
<Criteria <!-- BEGIN:AvailableOnlyIndicator -->AvailableOnlyIndicator=" {AvailableOnlyIndicator}"<!-- END:AvailableOnlyIndicator -->> 
<Criterion> 

ответ

1

Если у вас есть действительный файл XML в качестве шаблона, вы должны следовать один из двух способов:

  • Открыть как XmlDocument и обновлять свои значения через DOM
  • Создание XSLT и передать ваши параметры преобразования ваш шаблон

Ниже я говорю о первом методе. Я буду писать C#, но вы можете легко перевести его на VB.NET: (. Если кто-то требует, чтобы его работу)

XmlDocument doc = new XmlDocument(); 
doc.Load("yourfile.xml"); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("ota", "http://www.opentravel.org/OTA/2003/05") 

XmlElement hotelSearch = doc.SelectSingleNode 
    ("/ota:OTA_HotelSearchRQ", nsmgr) as XmlElement; 
hotelSearch.SetAttribute("EchoToken", "{EchoToken}"); 
hotelSearch.SetAttribute("Target", "{Target}"); 
// ... and so on ... 

XmlElement requestorId = hotelSearch.SelectSingleNode 
    ("ota:POS/ota:Source/ota:RequestorID", nsmgr) as XmlElement; 
requestorId.SetAttribute("ID", "{affiliateId}"); 
requestorId.SetAttribute("MessagePassword", "{MessagePassword}"); 
// ... and so on ... 
+0

wow .. Рубенс всегда их помогает мне ... u всегда дает идеальные решения. спасибо большое –

+0

, пожалуйста, скажите мне, как установить значение этого тега/элемента, потому что я пытался это сделать, но я получаю ошибку: Невозможно установить значение для типа узла «Элемент». я следующий кодом: Dim CountryName Как XmlElement = CType (hotelSearch.SelectSingleNode ("/ от: OTA_HotelSearchRQ/от: Критерии/от: Критерий/от: Адрес/от: CountryName", nsmgr), XmlElement) CountryName. SetAttribute («Код», BLLHotel_Search.CountryCode) CountryName.Value = BLLHotel_Search.CountryName –

+0

Я получил его, спасибо: CountryName.ChildNodes (0) .InnerText = BLLHotel_Search.CountryName –

1

Для чего-то вроде этого, если файлы маленькие и на основе текста я бы использовал регулярное выражение Replace или более простое String.Replace.

0

Вы можете использовать String.Replace.

+0

нет это .. я хочу это через файл обращение. файл хранится на жестком диске, как это сделать с этим? –

1

VB.NET вариант решения предоставленной г-ном Рубенсом Farias:

Dim doc As XmlDocument = New XmlDocument() 
    doc.Load(HttpContext.Current.Server.MapPath("~\actions\HOTEL_SEARCH.template.xml")) 

    Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable) 
    nsmgr.AddNamespace("ota", "http://www.opentravel.org/OTA/2003/05") 

    Dim hotelSearch As XmlElement = CType(doc.SelectSingleNode("/ota:OTA_HotelSearchRQ", nsmgr), XmlElement) 
    hotelSearch.SetAttribute("EchoToken", BLLHotel_Search.EchoToken) 
    hotelSearch.SetAttribute("Target", BLLHotel_Search.Target) 

    Dim requestorId As XmlElement = CType(hotelSearch.SelectSingleNode("ota:POS/ota:Source/ota:RequestorID", nsmgr), XmlElement) 
    hotelSearch.SetAttribute("ID", BLLHotel_Search.affiliateId) 
    hotelSearch.SetAttribute("MessagePassword", BLLHotel_Search.MessagePassword) 

    doc.Save(HttpContext.Current.Server.MapPath("hello.xml"))