1

<LI>閉じられていない要素を含むHTMLドキュメントがあります。開始タグ に続く</LI>それぞれの最後に追加する必要があります。注:前に付いていないオブジェクトには、タグを追加しないでください</OBJECT><LI><LI></LI></OBJECT>

<OBJECT value="example">
    <param name="Joe">

    </OBJECT>
<UL>
    <LI> <OBJECT type="example">
        <param name="Pat">
        <param name="State" value="Arizona">
        </OBJECT>
    <UL>
        <LI> <OBJECT type="example">
            <param name="Steve">
            <param name="State" value="California">
            </OBJECT>

<OBJECT type="text/sitemap">
    <param name="Carol">

    </OBJECT>

これは私がこれまで運がなかったものです

private void closeListItems(string doc)
{
    StringBuilder sb = new StringBuilder();
    Regex rx = new Regex("(<LI>.(.+?)</OBJECT>)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
    string[] hhcFile = File.ReadAllLines(doc);
    string temp = "";
    foreach (string line in hhcFile)
    {
        temp += line + "\n";
    }
    temp = rx.Replace(temp, "<LI>");
    StreamWriter sw = new StreamWriter(Application.StartupPath + "\\liFix.txt");
    sw.Write(temp);
    sw.Close();

}

更新:私も運がなくてこれを試しました:

private void closeListItems(string doc)
{
    StringBuilder sb = new StringBuilder();
    string[] hhcFile = File.ReadAllLines(doc);
    string temp = "";
    bool liOpen = false;
    foreach (string line in hhcFile)
    {
        temp = line;
        if (line.Contains("<LI>"))
        {
            liOpen = true;
        }
        if (line.Contains("</OBJECT>") && liOpen == true)
        {
            temp.Replace(temp, temp + "</LI>");
            liOpen = false;
        }
        sb.Append("\n" + temp);
    }
    File.WriteAllText("fixLi.txt", sb.ToString());

}
4

1 に答える 1

2

この答えは、更新に関するものです。

string.Replaceは文字列を返します。文字列はC#では不変です。つまり、文字列を直接変更することはできません。文字列を変更するように見える操作は、実際には1つを返します。

したがって、この行は次のとおりです。

temp.Replace(temp, temp + "</LI>");

..何もしません。そのはず:

temp = temp.Replace(temp, temp + "</LI>");
于 2012-07-29T22:31:02.000 に答える