- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取在 XSD 中的 xs:complexType 中声明的元素的注释。这样的元素属于 SchemaPreperty 类型。但是,与 SchemaGlobalElement 和 SchemaType 不同,我没有可以使用的 SchemaProperty.getAnnotation()
。
这是 XSD。我需要访问元素 number
的文档。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="test" type="my-test-type" />
<xs:complexType name="my-test-type">
<xs:sequence>
<xs:element name="number" "xs:int">
<xs:annotation>
<xs:documentation>This is the documentation I need.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
我该怎么做?看来……不可能。
最佳答案
所以我在 XMLBeans FAQ 中找到了答案。这是link
我正在粘贴常见问题解答的代码,因为仅包含链接的答案会让人皱眉。您几乎可以从这个示例中找出如何使其适应您自己的需求:
public static void someMethod() {
SchemaType t = XmlBeans.getContextTypeLoader().findType(new QName("http://test", "T"));
SchemaProperty[] schemaProperties = t.getProperties();
for (int i = 0; i < schemaProperties.length; i++)
printPropertyInfo(schemaProperties[i]);
System.out.println();
if (t.getContentType() == SchemaType.ELEMENT_CONTENT ||
t.getContentType() == SchemaType.MIXED_CONTENT)
{
SchemaParticle topParticle = t.getContentModel();
// topParticle is non-null if we checked the content
navigateParticle(topParticle);
}
}
public static void navigateParticle(SchemaParticle p)
{
switch (p.getParticleType())
{
case SchemaParticle.ALL:
case SchemaParticle.CHOICE:
case SchemaParticle.SEQUENCE:
// These are "container" particles, so iterate over their children
SchemaParticle[] children = p.getParticleChildren();
for (int i = 0; i < children.length; i++)
navigateParticle(children[i]);
break;
case SchemaParticle.ELEMENT:
printElementInfo((SchemaLocalElement) p);
break;
default:
// There can also be "wildcards" corresponding to <xs:any> elements in the Schema
}
}
public static void printPropertyInfo(SchemaProperty p)
{
System.out.println("Property name=\"" + p.getName() + "\", type=\"" + p.getType().getName()
+ "\", maxOccurs=\"" +
(p.getMaxOccurs() != null ? p.getMaxOccurs().toString() : "unbounded") + "\"");
}
public static void printElementInfo(SchemaLocalElement e)
{
System.out.println("Element name=\"" + e.getName() + "\", type=\"" + e.getType().getName()
+ "\", maxOccurs=\"" +
(e.getMaxOccurs() != null ? e.getMaxOccurs().toString() : "unbounded") + "\"");
SchemaAnnotation annotation = e.getAnnotation();
if (annotation != null)
{
SchemaAnnotation.Attribute[] att = annotation.getAttributes();
if (att != null && att.length > 0)
System.out.println(" Annotation: " + att[0].getName() + "=\"" +
att[0].getValue() + "\"");
}
}
至于属性,常见问题解答甚至没有提及它们,但它们的访问方式有所不同。这让我非常头疼,因为我试图弄清楚如何与上面的代码类似地访问属性的注释。不过,访问属性的注释非常简单明了。
这是我当前的方法:
public String getAttributeAnnotation(SchemaType t, String attributeLocalName) {
if (null != t) {
SchemaAttributeModel attrModel = t.getAttributeModel();
if (null != attrModel) {
SchemaLocalAttribute[] attributes = t.getAttributeModel().getAttributes();
if (attributes.length > 0) {
SchemaLocalAttribute attr = Arrays.stream(attributes)
.filter(a -> a.getName().getLocalPart().equals(attributeLocalName))
.findFirst().orElse(null);
if (null != attr) {
String annotationDoc = getAnnotationDocumentation(attr.getAnnotation());
return annotationDoc;
}
}
}
}
return null;
}
这是我的getAnnotationDocumentation()
(可以改进!)。您可以使用它来检索元素和属性的 xs:annotation 内的 xs:documentation。
public static String getAnnotationDocumentation(SchemaAnnotation an) {
if (null != an) {
StringBuilder sb = new StringBuilder();
XmlObject[] userInformation = an.getUserInformation();
if (null != userInformation & userInformation.length > 0) {
for (XmlObject obj : userInformation) {
Node docInfo = obj.getDomNode();
NodeList list = docInfo.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node c = list.item(i);
if (c.getNodeType() == Node.TEXT_NODE) {
String str = c.getNodeValue();
sb.append(str.trim());
break;
}
}
}
}
return sb.toString();
}
return null;
}
关于java - XMLBeans:获取嵌套元素的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965146/
我第一次尝试使用 SoapUI 5.3.0。这是我所做的: 创建了一个默认的 WCF 项目并将其发布到 IIS。 确保我可以在此处访问 WSDL:http://MyComputer/WCFTest/S
我正在尝试编写一个在 Excel 中写入数据的程序。但我不断收到如下所示的错误: Exception in thread "main" java.lang.NoSuchMethodError: org
我在 soapUI 中创建新项目并从 URL 导入 wsdl 文件时遇到问题。它给了我以下异常 加载错误 [ http://localhost:8080/WS/PersonalDetails.xsd]
我正在尝试获取在 XSD 中的 xs:complexType 中声明的元素的注释。这样的元素属于 SchemaPreperty 类型。但是,与 SchemaGlobalElement 和 Schema
我的 xsd 文件包含:
我使用 XML 文件和 XSD 文件完成了 xmlbean 教程,并成功访问了所有数据。 现在我添加了 XML 和 XSD 文件的命名空间,重新编译并重新创建 jar 文件。此后,java 文件中的包
我正在尝试从 xsd 编译 xmlbeans jar。 xsd 是由供应商提供给我的,因此我无法更改它。名称属性“CON”导致 XML bean 抛出异常,如下所示:线程“main”中出现异常 org
本文整理了Java中org.apache.xmlbeans.XmlBase64Binary类的一些代码示例,展示了XmlBase64Binary类的具体用法。这些代码示例主要来源于Github/Sta
本文整理了Java中org.apache.xmlbeans.XmlIDREF类的一些代码示例,展示了XmlIDREF类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Mav
本文整理了Java中org.apache.xmlbeans.XmlCalendar类的一些代码示例,展示了XmlCalendar类的具体用法。这些代码示例主要来源于Github/Stackoverfl
假设有一个 XMLBeans XmlObject有了属性,如何一步获得选定的属性? 我期待着一些事情...... removeAttributes(XmlObject obj, String[] se
我运行以下命令: inst2xsd -design ss -simple-content-types smart -enumerations 10 foo.xml 其中 foo.xml 是一个 500
XmlBeans 有点问题。似乎它会自动修剪我试图添加到 XML 的字符串的空格。例如。我有一个代码和值列表。每个代码都有一个值。 有些代码可能有缺失值,在这种情况下它们的值可能是“”。 但是
在使用 Xmlbeans 时,我注意到当一个元素被定义为混合类型的限制时,如果该元素中有一些文本,则 Xmlbeans 验证会失败。但是,如果我运行它,则相同的 xml 文件是有效的XmlSpy 中的
Apache XMLBeans 可用于从 XML 模式定义文件 (XSD) 生成 Java 类和接口(interface)。它还基于 StringEnumAbstractBase 和 StringEn
我有一个 xsd 文件,其中定义了 100 多种类型。我用 xmlbeans 绑定(bind)生成了 java 代码,然后我可以使用 MyType.Factory.newInstance(); 获取类
我有一个名为 SynonymsRequest 的 XML Beans 接口(interface): public interface SynonymsRequest extends org.apach
我们最近更新了我们的 Tomcat 网络服务。我们唯一真正更新的是我们将 XMLBeans 更新到 2.4 版,将 Saxon 更新到版本 9。 运行 Netbeans 和 eclipse,我们的项目
我搜索了一个与 bean 一起使用的解决方案,如下所示: public class CompositeMapper implements Mapper { protected List> ma
我正在使用 XMLBeans 从两个非常相似的 XSD 生成 Java 客户端代码。 XMLBeans 生成的类进入两个并行的包中。然后,我从数据库检索数据以与生成的类交互,以生成两个(同样几乎相同的
我是一名优秀的程序员,十分优秀!