GVKun编程网logo

如何从XMPP XML消息中获取自定义属性值?(获取xml指定标签的属性)

14

如果您想了解如何从XMPPXML消息中获取自定义属性值?和获取xml指定标签的属性的知识,那么本篇文章将是您的不二之选。我们将深入剖析如何从XMPPXML消息中获取自定义属性值?的各个方面,并为您解答

如果您想了解如何从XMPP XML消息中获取自定义属性值?获取xml指定标签的属性的知识,那么本篇文章将是您的不二之选。我们将深入剖析如何从XMPP XML消息中获取自定义属性值?的各个方面,并为您解答获取xml指定标签的属性的疑在这篇文章中,我们将为您介绍如何从XMPP XML消息中获取自定义属性值?的相关知识,同时也会详细的解释获取xml指定标签的属性的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

如何从XMPP XML消息中获取自定义属性值?(获取xml指定标签的属性)

如何从XMPP XML消息中获取自定义属性值?(获取xml指定标签的属性)

好的,简单的问题,但对我来说很重要。

因此,其他android客户端正在发送此xml消息:

<message  id=''6ymdM-19''  to=''xox@xox.xox/smack''  type=''chat''>  <subject>normal</subject>  <received xmlns=''urn:xmpp:receipts'' id=''HVgQw-5''/></message>

我的听众大致是这样的:

private class MsgListener implements ChatStateListener {/** * Constructor. */public MsgListener() {}@Overridepublic void processMessage(Chat chat, org.jivesoftware.smack.packet.Message message) {    String xmlMessage = message.toXML();    Log.v(TAG, "XML Chat: "+xmlMessage);    // getExtension namespace try urn:xmpp:receipts    if(xmlMessage.contains("<request xmlns=")) {        Log.d(TAG, "new chat message arrive! reply with RECEIVED!");        replyReceived(message);    } else if(xmlMessage.contains("<received xmlns=")) {        Log.d(TAG, "RECEIVED notification arrived!");        PacketExtension statusExtension =                 message.getExtension("urn:xmpp:receipts");        Log.d(TAG, "Extension name: "+statusExtension.getElementName());        Log.d(TAG, "Extension XML: "+statusExtension.toXML());        Log.d(TAG, "Extension string: "+statusExtension.toString());    }     ....     ....     ....}

在这种情况下,我想在“ received”元素标签内获取属性“ id”的值。但是我在日志中看到的是这样的:

RECEIVED notification arrived!D/ChatAdapter(320): Extension name: receivedD/ChatAdapter(320): Extension XML: <received xmlns="urn:xmpp:receipts"></received>D/ChatAdapter(320): Extension string:              org.jivesoftware.smack.packet.DefaultPacketExtension@44f10430

那么我如何获得“ HVgQw-5”?

更新

其实有些奇怪……我从我的SMACK调试中收到了xmlordinh,如下所示:

 < D/SMACK(320): 05:40:28 PM RCV  (1156991856): message id="6ymdM-19"   to="syeikh@emass.sangkuriang.co.id/Smack" from="emu22@emass.sangkuriang.co.id/Smack"   type="chat"><subject> D/SMACK(320): 05:40:28 PM RCV  (1156991856): normal</subject><thread>cr0900</thread> **<received xmlns="urn:xmpp:receipts" id="HVgQw-5"/>**<active       xmlns="http://jabber.org/protoc D/SMACK(320): 05:40:28 PM RCV  (1156991856): ol/chatstates"/></message>

但是当我执行message.toXML时,它就像这样打印出来:

XML Chat: <message id="6ymdM-19" to="syeikh@emass.sangkuriang.co.id/Smack" from="emu22@emass.sangkuriang.co.id/Smack" type="chat"><subject>normal</subject><thread>cr0900</thread>**<received xmlns="urn:xmpp:receipts">**</received><active xmlns="http://jabber.org/protocol/chatstates" /></message>

为什么会这样呢?为什么我想念“身份证”?

答案1

小编典典

关于ID,首先获取扩展名的句柄,然后查找ID,因此

DeliveryReceipt deliveryReceiptObj =(DeliveryReceipt) message.getExtension(DeliveryReceipt.NAMESPACE);// ID below is what you wantdeliveryReceiptObj.getId();
  1. 定义您的EmbeddedPacketExtension(这样您就可以对此进行处理,而不是 DefaultPacketExtension由SMACK提供)

  2. 扩展的提供者 EmbeddedExtensionProvider

  3. registerProvider 您刚刚使用命名空间创建的

代码如下:

/*** User: suvrat * Represents a <b>message delivery receipt</b> entry as specified by* <a href="http://xmpp.org/extensions/xep-0184.html">Message Delivery Receipts</a>.**/import org.jivesoftware.smack.packet.PacketExtension;public class DeliveryReceipt implements PacketExtension{    public static final String NAMESPACE = "urn:xmpp:receipts";    private String id; /// original ID of the delivered message    public DeliveryReceipt(String id)    {        this.id = id;    }    public String getId()    {        return id;    }    public String getElementName()    {        return "received";    }    public String getNamespace()    {        return NAMESPACE;    }    public String toXML()    {        return "<received xmlns=''" + NAMESPACE + "'' id=''" + id + "''/>";    }} /** * User: suvrat * The DeliveryReceiptProvider parses DeliveryReceipt packets. */ */import org.jivesoftware.smack.packet.PacketExtension;import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider;import org.xmlpull.v1.XmlPullParser;import java.util.List;import java.util.Map;public class DeliveryReceiptProvider extends EmbeddedExtensionProvider{    @Override    protected PacketExtension createReturnExtension(String currentElement, String currentNamespace,    Map<String, String> attributeMap, List<? extends PacketExtension> content)    {        return new DeliveryReceipt(attributeMap.get("id"));    }}   //3.) finally where ever you would like to parse packet ProviderManager.getInstance().addExtensionProvider("received", DeliveryReceipt.NAMESPACE, new DeliveryReceiptProvider());

$.post(url,

$.post(url,"自定义的标签属性值",function(){});后台怎么获取自定义属性值?

$.post(url,"自定义的标签属性值",function(){});后台怎么获取自定义属性值?

android – 如何从xml获取BuildConfig值?

android – 如何从xml获取BuildConfig值?

我有一个xml文件.在xml文件中,我想获得BuildConfig值. BuildConfig值在build.gradle中设置.

   <?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="com_my_api_key">**REPLACE_WITH_YOUR_API_KEY**</string>
</resources>

我想从buildConfig获取api Key,类似于我在java代码中获取这些值的方式.

  public class MyApp extends Application{

      public String APPTIMIZE_KEY = BuildConfig.APPTIMIZE_KEY;

 }

这是在build.gradle中设置的值,它来自外部文件.

   release {
        buildConfigField "boolean", "APP_DEBUG", "false"
        buildConfigField "String", "APPTIMIZE_KEY", "\"${props.getProperty("apptimizeKey_App1")}\""

我如何参考这个—>得到它的xml文件中的BuildConfig.APPTIMIZE_KEY?

解决方法:

有a lightly documented resValue counterpart to buildConfigField.我还没有尝试过,但有些事情就是我要开始的地方:

resValue "string", "com_my_api_key", "\"${props.getProperty("apptimizeKey_App1")}\""

如果您需要/希望也可以从BuildConfig访问该值,那么这将与您现有的buildConfigField一起使用.您不再需要手动声明字符串资源,而是为您生成它.

asp.net-mvc-3 – 无法在MVC3 HTML Helper中获取自定义属性值

asp.net-mvc-3 – 无法在MVC3 HTML Helper中获取自定义属性值

我用一个需要来自模型属性的属性值的方法扩展了 HTML帮助器.所以我已经定义了一个自定义属性.

public class ChangeLogFieldAttribute : Attribute {
        public string FieldName { get; set; }
    }

在我的模型中使用它就像这样.

[display(Name = "Style")]
    [ChangeLogField(FieldName = "styleid")]
    public string Style { get; set; }

在我的帮助方法中,如果属性用于属性,我有以下代码来获取属性的FieldName值.

var itemName = ((MemberExpression)ex.Body).Member.Name;

        var containerType = html.ViewData.ModelMetadata.ContainerType;
        var attribute = ((ChangeLogFieldAttribute[])containerType.GetProperty(html.ViewData.ModelMetadata.PropertyName).GetCustomAttributes(typeof(ChangeLogFieldAttribute),false)).FirstOrDefault();
        if (attribute != null) {
            itemName = attribute.FieldName;
        }

但是,当我到达此代码时,我得到一个异常,因为containerType为null.

我不确定我是否正在做任何正确的事,但是我从大约4个不同的来源中取得了这一点.如果您可以建议解决我的问题或替代方案,我将不胜感激.

谢谢.

更新解决方案

我使用了Darin Dimitrov的解决方案,虽然我不得不调整它.这是我添加的内容.我必须检查属性Metatdata的存在,一切都很好.

var fieldName = ((MemberExpression)ex.Body).Member.Name;

        var Metadata = ModelMetadata.FromLambdaExpression(ex,html.ViewData);
        if (Metadata.AdditionalValues.ContainsKey("fieldName")) { 
            fieldName = (string)Metadata.AdditionalValues["fieldName"];
        }

解决方法

您可以使属性元数据识别:

public class ChangeLogFieldAttribute : Attribute,IMetadataAware
{
    public string FieldName { get; set; }

    public void OnMetadataCreated(ModelMetadata Metadata)
    {
        Metadata.AdditionalValues["fieldName"] = FieldName;
    }
}

然后在助手里面:

var Metadata = ModelMetadata.FromLambdaExpression(ex,htmlHelper.ViewData);
var fieldName = Metadata.AdditionalValues["fieldName"];

c# – 如何从未(实际)加载的程序集中获取自定义属性

c# – 如何从未(实际)加载的程序集中获取自定义属性

我们都知道可以使用GetCustomAttributes方法查询程序集的属性.我想用它来为我的应用程序识别扩展模块.但是,为了避免加载每个组件,我更喜欢防御方法:

>使用Assembly.ReflectionOnlyLoadFrom获取有关程序集的更多详细信息(有我的ModuleAttribute吗?)
>如果找到ModuleAttribute,我将最终使用Assembly.LoadFrom加载它

不幸的是,似乎没有办法从程序集中获取属性,该程序集被加载到仅反射上下文中:

myAssembly.GetCustomAttributes(typeof(ModuleAttribute),false)

失败的InvalidOperationException(“反映通过ReflectionOnlyGetType加载的Type的自定义属性是非法的”)和

CustomAttributeData.GetCustomAttributes(myAssembly)

由于未加载相关的程序集而导致ReflectionTypeLoadException失败.

那么如何获得没有的属性

>通过调用Assembly.LoadFrom以无用(可能有害)类型污染我的应用程序域
>需要加载所有引用的程序集
>需要单独的应用程序域(给它一个简短的尝试,闻起来更像PITA)

解决方法

在检查了所有答案并进行更多研究之后,似乎根本无法做我想要的事情:在将程序集加载到应用程序域之前检查程序集是否是有效的扩展模块.

要么我必须将应该检查的程序集加载到另一个应用程序域中,在那里进行检查以及何时成功将其再次加载到我当前的应用程序域中,或者我需要在程序集本身之外存储程序集的元数据并信任此元数据.由于架构限制,选项一是不可能的,选项二只是改变了问题但没有解决它.

可能最好的选择是使用Managed Extensibility Framework,但遗憾的是在当前的设置中并不容易.

我最终相信模块目录中没有任何“坏”并加载所有内容(一些检查不超过最大文件大小而且尚未加载).

不过,谢谢你的想法.

关于如何从XMPP XML消息中获取自定义属性值?获取xml指定标签的属性的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于$.post(url,"自定义的标签属性值",function(){});后台怎么获取自定义属性值?、android – 如何从xml获取BuildConfig值?、asp.net-mvc-3 – 无法在MVC3 HTML Helper中获取自定义属性值、c# – 如何从未(实际)加载的程序集中获取自定义属性的相关知识,请在本站寻找。

本文标签: