如果sgml中包含特定的标记,请使用java删除该父标记
如果父标记中只有note标记,我想删除该标记 例如: 输入:如果sgml中包含特定的标记,请使用java删除该父标记,java,regex,parsing,sgml,Java,Regex,Parsing,Sgml,如果父标记中只有note标记,我想删除该标记 例如: 输入: <data> <subdata> <l1item> <note> <para>hello </para> </note> </l1item> </subdata> <subdata> <l2item> <para> dont delete
<data>
<subdata>
<l1item>
<note>
<para>hello
</para>
</note>
</l1item>
</subdata>
<subdata>
<l2item>
<para> dont delete
</para>
</l2item>
<l3item>
<note>
<para>hello
</para>
</note>
<para> dont delete
</para>
</l3item>
</subdata>
</data>
你好
不要删除
你好
不要删除
预期产出:
<data>
<subdata>
<note>
<para>hello
</para>
</note>
</subdata>
<subdata>
<l2item>
<para> dont delete
</para>
</l2item>
<l3item>
<note>
<para>hello
</para>
</note>
<para> dont delete
</para>
</l3item>
</subdata>
</data>
你好
不要删除
你好
不要删除
在上面的示例中,l1item标记被删除,其中只有note标记;l2item没有被删除,因为它有para标记;l3item没有被删除,因为它有note标记和para标记
因此,我的要求就像我想删除l1item或l2item或l3item,如果其中只有note标记,并且如果它有一些其他标记或note标记以及一些不应该删除的其他标记。您可以在这里使用Jsoup,尽管它主要不是SGML解析器 我们正在寻找
注意
元素,它们是各自父元素的唯一子元素。这可以翻译为:
注:独生子女
当我们发现其中一个便笺时,我们可以找到它的父便笺并用找到的便笺替换该父便笺。我们将使用以下方法进行此操作:
foundNote.parent().replaceWith(foundNote);
让我们将所有这些放在下面的示例代码中:
示例代码
String sgml=“\n\n\n\n hello\n\n\n\n\n\n不删除\n\n\n\n hello\n\n\n\n\n不删除\n\n\n\n\n”;
Document doc=Parser.xmlParser().parseInput(sgml,“”);
System.out.println(“BEFORE:\n”+doc.html());
Elements only childnotes=doc.select(“注:独生子女”);
用于(要素注释:仅限儿童){
元素noteParent=note.parent();
如果(noteParent!=null){
noteParent.replacetwith(note);
}
}
System.out.println(“之后:\n”+doc.html());
输出
之前:
你好
(...)
之后:
你好
(...)
熟悉一下。Java的实现就是这个类。我查看了xslt,我认为如果唯一的note子元素存在,那么删除父元素会更困难。但是如果我用大写字母表示数据,它会自动解析为更低的值case@Karthick如果您需要有关“小写”问题的帮助,请发布一个新问题。我们可以用java正则表达式或其他东西做些什么吗?,因为jsoup更改了sgml格式
BEFORE:
<data>
<subdata>
<l1item>
<note>
<para>
hello
</para>
</note>
</l1item>
</subdata>
(...)
AFTER:
<data>
<subdata>
<note>
<para>
hello
</para>
</note>
</subdata>
(...)