gpt4 book ai didi

java - 从 XMLBean 中删除属性

转载 作者:行者123 更新时间:2023-12-02 08:22:54 25 4
gpt4 key购买 nike

假设有一个 XMLBeans XmlObject有了属性,如何一步获得选定的属性?

我期待着一些事情......

removeAttributes(XmlObject obj, String[] selectableAttributes){};

现在上述方法应该返回仅包含这些属性的 XMLObject

最佳答案

假设:要从 XmlObject 中删除的属性在相应的 XML 架构中必须是可选的。在这种假设下,XMLBeans 为您提供了一些有用的方法:unsetXisSetX(其中 X 是您的属性名称。因此,我们可以以这种方式实现 removeAttributes 方法:

public void removeAttributes(XmlObject obj, 
String[] removeAttributeNames)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException, SecurityException,
NoSuchMethodException {
Class<?> clazz = obj.getClass();
for (int i = 0; i < removeAttributeNames.length; i++) {
String attrName =
removeAttributeNames[i].substring(0, 1).toUpperCase() +
removeAttributeNames[i].substring(1);
String isSetMethodName = "isSet" + attrName;

Boolean isSet = null;
try {
Method isSetMethod = clazz.getMethod(isSetMethodName);
isSet = (Boolean) isSetMethod.invoke(obj, new Object[] {});
} catch (NoSuchMethodException e) {
System.out.println("attribute " + removeAttributeNames[i]
+ " is not optional");
}

if (isSet != null && isSet.booleanValue() == true) {
String unsetMethodName = "unset" + attrName;
Method unsetMethod = clazz.getMethod(unsetMethodName);
unsetMethod.invoke(obj, new Object[] {});
}
}
}

注1:我稍微修改了您的方法签名的语义:第二个参数(String[])实际上是您要删除的属性列表。我认为这与方法名称 (removeAttributes) 更加一致,而且它也简化了事情(使用 unsetXisSetX)。

注 2:在调用 unsetX 之前调用 isSetX 的原因是,如果满足以下条件,unsetX 会抛出 InitationTargetException未设置属性 X 时调用。

注释 3:您可能希望根据需要更改异常处理。

关于java - 从 XMLBean 中删除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138947/

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