gpt4 book ai didi

java - 如何从 XMLReader 获取属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:05 25 4
gpt4 key购买 nike

我有一些 HTML,我正在使用 Html.fromHtml(...) 将其转换为 Spanned,并且我有一个正在使用的自定义标记其中:

<customtag id="1234">

所以我实现了一个 TagHandler 来处理这个自定义标签,如下所示:

public void handleTag( boolean opening, String tag, Editable output, XMLReader xmlReader ) {

if ( tag.equalsIgnoreCase( "customtag" ) ) {

String id = xmlReader.getProperty( "id" ).toString();
}
}

在这种情况下,我得到一个 SAX 异常,因为我相信“id”字段实际上是一个属性,而不是属性。但是,XMLReader 没有getAttribute() 方法。所以我的问题是,如何使用此 XMLReader 获取“id”字段的值?谢谢。

最佳答案

这是我通过反射获取 xmlReader 私有(private)属性的代码:

Field elementField = xmlReader.getClass().getDeclaredField("theNewElement");
elementField.setAccessible(true);
Object element = elementField.get(xmlReader);
Field attsField = element.getClass().getDeclaredField("theAtts");
attsField.setAccessible(true);
Object atts = attsField.get(element);
Field dataField = atts.getClass().getDeclaredField("data");
dataField.setAccessible(true);
String[] data = (String[])dataField.get(atts);
Field lengthField = atts.getClass().getDeclaredField("length");
lengthField.setAccessible(true);
int len = (Integer)lengthField.get(atts);

String myAttributeA = null;
String myAttributeB = null;

for(int i = 0; i < len; i++) {
if("attrA".equals(data[i * 5 + 1])) {
myAttributeA = data[i * 5 + 4];
} else if("attrB".equals(data[i * 5 + 1])) {
myAttributeB = data[i * 5 + 4];
}
}

请注意,您可以将这些值放入 map 中,但对于我的使用来说,这开销太大了。

关于java - 如何从 XMLReader 获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com