Подскажите пожалуйста, как найти и заменить конкретное слово в файле с помощью vb.net
Я создал шаблон XML-файла, который содержит несколько слов, таких как {contentname}. Мне нужно заменить такие теги с моими значениями. Пожалуйста, скажите мне, как искать такие слова и заменять их с помощью filehandling в vb.net. Мой xml templatefile выглядит так:
<!-- 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>
4 ответа
Решение
Если у вас есть действительный 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 ...
Для чего-то подобного, если файлы небольшие и основаны на тексте, я бы использовал регулярное выражение Replace или более простое String.Replace.
Версия VB.NET (если кому-то требуется. Работает) решения, предоставленного г-ном Рубенсом Фариасом:
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"))