替换无效的xml文件的内部文本

时间:2014-01-02 11:05:30

标签: vb.net visual-studio-2010 visual-studio

我想替换XML文件标记的内部文本。我所拥有的XML文件格式不正确,因此我们无法使用LINQ-TO-XML。还有另一种方法可以实现这个目标吗?

<conf-start ISO-8601-date="2011-05-31"><day>31</day><month>Jan</month><year>2011</year></conf-start>

在XML文件中,我只想将Jan替换为01。 注意:月份名称可以在不同的文件中更改,也可以在

中更改
ISO-8601-date="2011-05-31"

可以改变。所以基本上可以找到表达式来替换无效XML文件中的上述行。

我试过这个,

Dim filePath As String = TextBox1.Text
    Dim directory1 As String = Path.GetDirectoryName(filePath)
    Dim split As String() = filePath.Split("\")
    Dim parentFolder As String = split(split.Length - 2)
    Dim yourXml = XDocument.Load(TextBox1.Text & "\" & parentFolder & ".xml").Root

    ' Change each monthname to the number of the month
    For Each elem In yourXml...<conf-start>.<day>.<month>
        elem.Value = DateTime.ParseExact(elem.Value, "MMMM", System.Globalization.CultureInfo.InvariantCulture).Month
    Next

    ' save file
    yourXml.Save(TextBox1.Text & "\" & parentFolder & ".xml")

但在某些文件中我得到错误,例如xlink是未声明的前缀,在其他一些文件中我得到不同的错误

2 个答案:

答案 0 :(得分:0)

试试这个

Dim y = "<conf-start iso-8601-date=""2011-05-31""><day>31</day><month>Jan</month><year>2011</year></conf-start>"

   Dim Match = Regex.Match(y, "<month>([^>]*)<\/month>").Groups(1).ToString
   Regex.Replace(y, Match, DateTime.ParseExact(Match, "MMM", CultureInfo.CurrentCulture).Month.ToString)

它会给你OP赞

<conf-start iso-8601-date="2011-05-31"><day>31</day><month>01</month><year>2011</year></conf-start>

答案 1 :(得分:0)

试试这段代码:

    Dim ds As New DataSet

    ds.ReadXml("yourXmlFile.xml")
    If Not ds Is Nothing Then
        ds.Tables("conf-start").Rows(0)("month") = DateTime.ParseExact(ds.Tables(0).Rows(0)("month"), "MMM", CultureInfo.CurrentCulture).Month.ToString
        ds.WriteXml("yourXmlFile.xml")
    End If