为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Java 从 XML 文件中获取属性

如何使用 Java 从 XML 文件中获取属性

青春有我 2023-04-19 16:32:53
我为Oracle Access Manager开发了一个身份验证插件简而言之,它包含:类以下XML我正在尝试从XML文件中动态获取<Value>an 的标记 。<Attribute><Plugin type="Authentication">    <author>Phill</author>    <email>phill@example.com</email>    <creationDate>12:47:00, 2019-07-11</creationDate>    <description>Phill-Plugin</description>    <configuration>        <AttributeValuePair>            <Attribute type="string" length="60">GenerateUrl</Attribute>            <mandatory>true</mandatory>            <instanceOverride>false</instanceOverride>            <globalUIOverride>true</globalUIOverride>            <value>This is the value i'm trying to retrieve</value>        </AttributeValuePair>    </configuration></Plugin>类            try {                CredentialParam tem = context.getCredential().getParam("GenerateUrl");                String temp = (String) tem.getValue();                System.out.println("TEST: " + temp);                generateUrl = temp + "The User" + user;            } catch (Exception e) {                System.out.println("\n\n\n-------------------\n");                System.out.println("-      Input Is:         -\n");                System.out.println("-       "+e+"            -\n");                System.out.println("-------------------\n");                generateUrl = "A URL" + "The User" + user;            }重要的提示:该context对象是AuthenticationContext包含有关插件信息的实例根据 Oracle 的文档,这是某人检索的确切方式Attribute,但我总是得到NullPointerException还有其他方法可以检索吗<Value>?
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

我不得不尝试另一种方法并正确解析XML


如果你可以在这里使用外部库是如何:



    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

        File stocks = new File("PhillPlugin.xml");

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

            Document doc = dBuilder.parse(stocks);

            doc.getDocumentElement().normalize();


            NodeList nodes = doc.getElementsByTagName("AttributeValuePair");


            for (int i = 0; i < nodes.getLength(); i++) {

              Node node = nodes.item(i);

              if (node.getNodeType() == Node.ELEMENT_NODE) {

                Element element = (Element) node;

                if(i==0)

                 {

                 tempurlGen=getValue("value",element);

                   System.out.println("GenerateUrl: " + getValue("value", element));

                 }

                 else if (i==1)

                 {

                 tempurlVal=getValue("value",element);

                 System.out.println("ValidateUrl: " + getValue("value", element));

                 }


              }

            }

          }

          static String getValue(String tag, Element element) {

            NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();

            Node node = (Node) nodes.item(0);

            return node.getNodeValue();

          }


如果你不能javax在这里包含库是如何解析XML使用流



    public void getXMLData() throws Exception {

        File stocks = new File("PhillPlugin.xml");

        BufferedInputStream in = new BufferedInputStream(new FileInputStream(stocks));

        StringBuilder sb = new StringBuilder();

        int cp;

        while ((cp = in.read()) != -1) {

            sb.append((char) cp);

            String t = sb.toString();

            if (t.contains("</AttributeValuePair>")) {

                String test = sb.toString();

                String test1p[] = test.split("<value>|</value>");

                tempurlGen = test1p[1];

                break;

            }

        }


        sb = new StringBuilder();

        while ((cp = in.read()) != -1) {


            sb.append((char) cp);

            String t = sb.toString();

            if (t.contains("</AttributeValuePair>")) {

                String test = sb.toString();

                String test1p[] = test.split("<value>|</value>");

                tempurlVal = test1p[1];

                break;

            }


        }

    }


确保你定义tempurlGen和tempurlVal



查看完整回答
反对 回复 2023-04-19
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

尝试这个:


@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "", propOrder = {

    "author",

    "email",

    "creationDate",

    "description",

    "configuration"

})

@XmlRootElement(name = "Plugin")

public class Plugin {


    //Add getters and setters including ones for inner classes


    @XmlElement(required = true)

    private String author;

    @XmlElement(required = true)

    private String email;

    @XmlElement(required = true)

    private String creationDate;

    @XmlElement(required = true)

    private String description;

    @XmlElement(required = true)

    private Plugin.Configuration configuration;

    @XmlAttribute(name = "type")

    private String type;


    @XmlAccessorType(XmlAccessType.FIELD)

    @XmlType(name = "", propOrder = {

        "attributeValuePair"

    })

    public static class Configuration {


        @XmlElement(name = "AttributeValuePair", required = true)

        private Plugin.Configuration.AttributeValuePair attributeValuePair;


        @XmlAccessorType(XmlAccessType.FIELD)

        @XmlType(name = "", propOrder = {

            "attribute",

            "mandatory",

            "instanceOverride",

            "globalUIOverride",

            "value"

        })

        public static class AttributeValuePair {


            @XmlElement(name = "Attribute", required = true)

            private Plugin.Configuration.AttributeValuePair.Attribute attribute;

            @XmlElement(required = true)

            private String mandatory;

            @XmlElement(required = true)

            private String instanceOverride;

            @XmlElement(required = true)

            private String globalUIOverride;

            @XmlElement(required = true)

            private String value;


            @XmlAccessorType(XmlAccessType.FIELD)

            @XmlType(name = "", propOrder = {

                "value"

            })

            public static class Attribute {


                @XmlValue

                private String value;

                @XmlAttribute(name = "type")

                private String type;

                @XmlAttribute(name = "length")

                private Byte length;


            }


        }


    }


}

对于解组部分:


JAXBContext jaxbContext = JAXBContext.newInstance(Plugin.class);

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

StringReader reader = new StringReader("xml string here");

Plugin plugin = (Plugin) unmarshaller.unmarshal(reader); 


查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信